十七届蓝桥杯模拟赛(二)
视频讲解
🎥 视频讲解
第一题
5分
#include<bits/stdc++.h>
using namespace std;
int month[]={-1,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int t){
int cnt[10]={0};
string s=to_string(t);
for(int i=0;i<8;i++){
if(i==4 && s[i]=='0') continue;
if(i==6 && s[i]=='0') continue;
cnt[s[i]-'0']++;
}
int mx=0,mi=10;
for(int i=0;i<=9;i++){
if(cnt[i]){
mx=max(mx,cnt[i]);
mi=min(mi,cnt[i]);
}
}
return mx==mi;
}
bool leap(int year){
return year%400==0 || (year%4==0 && year%100!=0);
}
int main(){
int ans=0;
bool f=0;
for(int year=2239;year<=9876;year++){
if(leap(year)) month[2]=29;
else month[2]=28;
for(int mo=1;mo<=12;mo++){
for(int day=1;day<=month[mo];day++){
if(year==2239 && mo==9 && day==9) f=1;
if(!f) continue;
int t=year*10000+mo*100+day;
if(check(t)) ans++;
if(year==9876 && mo==1 && day==1){
cout<<ans;
return 0;
}
}
}
}
return 0;
}
import java.util.*;
public class Main {
static int[] month={-1,31,28,31,30,31,30,31,31,30,31,30,31};
static boolean check(int t){
int[] cnt=new int[10];
String s=String.valueOf(t);
while(s.length()<8) s="0"+s;
for(int i=0;i<8;i++){
if(i==4 && s.charAt(i)=='0') continue;
if(i==6 && s.charAt(i)=='0') continue;
cnt[s.charAt(i)-'0']++;
}
int mx=0,mi=10;
for(int i=0;i<10;i++){
if(cnt[i]>0){
mx=Math.max(mx,cnt[i]);
mi=Math.min(mi,cnt[i]);
}
}
return mx==mi;
}
static boolean leap(int y){
return y%400==0 || (y%4==0 && y%100!=0);
}
public static void main(String[] args){
int ans=0;
boolean f=false;
for(int year=2239;year<=9876;year++){
month[2]=leap(year)?29:28;
for(int mo=1;mo<=12;mo++){
for(int day=1;day<=month[mo];day++){
if(year==2239 && mo==9 && day==9) f=true;
if(!f) continue;
int t=year*10000+mo*100+day;
if(check(t)) ans++;
if(year==9876 && mo==1 && day==1){
System.out.println(ans);
return;
}
}
}
}
}
}
month=[-1,31,28,31,30,31,30,31,31,30,31,30,31]
def check(t):
cnt=[0]*10
s=str(t).zfill(8)
for i in range(8):
if i==4 and s[i]=='0': continue
if i==6 and s[i]=='0': continue
cnt[int(s[i])]+=1
vals=[c for c in cnt if c>0]
return max(vals)==min(vals)
def leap(y):
return y%400==0 or (y%4==0 and y%100!=0)
ans=0
f=False
for year in range(2239,9877):
month[2]=29 if leap(year) else 28
for mo in range(1,13):
for day in range(1,month[mo]+1):
if year==2239 and mo==9 and day==9:
f=True
if not f:
continue
t=year*10000+mo*100+day
if check(t):
ans+=1
if year==9876 and mo==1 and day==1:
print(ans)
exit()
第二题
答案:192939070136
5分
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll ans=0;
for(ll i=789456,t1=1;t1<=901234;t1++,i=i+567890){
for(ll j=654321,t2=1;t2<=500001;t2++,j=j+876543){
if(i<j) ans++;
}
}
cout<<ans;
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args){
long ans=0;
long i=789456;
for(long t1=1;t1<=901234;t1++,i+=567890){
long j=654321;
for(long t2=1;t2<=500001;t2++,j+=876543){
if(i<j) ans++;
}
}
System.out.println(ans);
}
}
ans=0
i=789456
for t1 in range(1,901235):
j=654321
for t2 in range(1,500002):
if i<j:
ans+=1
j+=876543
i+=567890
print(ans)
第三题
10分
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int n,x;
int h[N];
void solve(){
cin>>n>>x;
for(int i=1;i<=n;i++) cin>>h[i];
for(int i=2;i<=n;i++){
if(h[i]>h[i-1]){
if(h[i]-h[i-1]>1){
cout<<"Lose\n";
return;
}
}
if(h[i]<h[i-1]){
if(h[i-1]-h[i]>x){
cout<<"Lose\n";
return;
}
}
}
cout<<"Win\n";
}
int main(){
int T;
cin>>T;
while(T--) solve();
return 0;
}
import java.util.*;
public class Main {
static int n,x;
static int[] h=new int[1010];
static void solve(Scanner sc){
n=sc.nextInt();
x=sc.nextInt();
for(int i=1;i<=n;i++) h[i]=sc.nextInt();
for(int i=2;i<=n;i++){
if(h[i]>h[i-1]){
if(h[i]-h[i-1]>1){
System.out.println("Lose");
return;
}
}
if(h[i]<h[i-1]){
if(h[i-1]-h[i]>x){
System.out.println("Lose");
return;
}
}
}
System.out.println("Win");
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();
while(T-->0) solve(sc);
}
}
import sys
input=sys.stdin.readline
def solve():
n,x=map(int,input().split())
h=[0]+list(map(int,input().split()))
for i in range(2,n+1):
if h[i]>h[i-1]:
if h[i]-h[i-1]>1:
print("Lose")
return
if h[i]<h[i-1]:
if h[i-1]-h[i]>x:
print("Lose")
return
print("Win")
T=int(input())
for _ in range(T):
solve()
第四题
7分
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
ll ksm(ll x,ll y,ll p){
ll res=1;
for(ll i=1;i<=y;i++){
res=res*x%p;
}
return res;
}
void solve(){
ll x,y;
cin>>x>>y;
if(x<=y){
cout<<1<<"\n";
return;
}
cout<<(y+1)*ksm(2,x-y-1,mod)%mod<<"\n";
}
int main(){
int T;
cin>>T;
while(T--) solve();
return 0;
}
import java.util.*;
public class Main {
static final long mod=998244353;
static long ksm(long x,long y){
long res=1;
for(long i=1;i<=y;i++){
res=res*x%mod;
}
return res;
}
static void solve(Scanner sc){
long x=sc.nextLong();
long y=sc.nextLong();
if(x<=y){
System.out.println(1);
return;
}
System.out.println((y+1)*ksm(2,x-y-1)%mod);
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();
while(T-->0) solve(sc);
}
}
import sys
input=sys.stdin.readline
mod=998244353
def ksm(x,y):
res=1
for _ in range(y):
res=res*x%mod
return res
def solve():
x,y=map(int,input().split())
if x<=y:
print(1)
return
print((y+1)*ksm(2,x-y-1)%mod)
T=int(input())
for _ in range(T):
solve()
10分
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
ll ksm(ll x,ll y,ll p){
ll res=1;
while(y){
if(y&1) res=res*x%p;
x=x*x%p;
y>>=1;
}
return res;
}
void solve(){
ll x,y;
cin>>x>>y;
if(x<=y){
cout<<1<<"\n";
return;
}
cout<<(y+1)*ksm(2,x-y-1,mod)%mod<<"\n";
}
int main(){
int T;
cin>>T;
while(T--) solve();
return 0;
}
import java.util.*;
public class Main {
static final long mod=998244353;
static long ksm(long x,long y){
long res=1;
while(y>0){
if((y&1)==1) res=res*x%mod;
x=x*x%mod;
y>>=1;
}
return res;
}
static void solve(Scanner sc){
long x=sc.nextLong();
long y=sc.nextLong();
if(x<=y){
System.out.println(1);
return;
}
System.out.println((y+1)*ksm(2,x-y-1)%mod);
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();
while(T-->0) solve(sc);
}
}
import sys
input=sys.stdin.readline
mod=998244353
def ksm(x,y):
res=1
while y:
if y&1:
res=res*x%mod
x=x*x%mod
y>>=1
return res
def solve():
x,y=map(int,input().split())
if x<=y:
print(1)
return
print((y+1)*ksm(2,x-y-1)%mod)
T=int(input())
for _ in range(T):
solve()
第五题
0.75分
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll n,m,k;
ll a[N],c[N];
void solve2(){
ll ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,min(m,a[i]));
m-=c[i];
}
cout<<ans;
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n-1;i++) cin>>c[i];
for(int i=1;i<=n;i++) cin>>a[i];
if(k==1){
solve2();
return 0;
}
return 0;
}
import java.util.*;
public class Main {
static final int N=100010;
static long n,m,k;
static long[] a=new long[N];
static long[] c=new long[N];
static void solve2(){
long ans=0;
for(int i=1;i<=n;i++){
ans=Math.max(ans,Math.min(m,a[i]));
m-=c[i];
}
System.out.print(ans);
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextLong();
m=sc.nextLong();
k=sc.nextLong();
for(int i=1;i<=n-1;i++) c[i]=sc.nextLong();
for(int i=1;i<=n;i++) a[i]=sc.nextLong();
if(k==1){
solve2();
return;
}
}
}
import sys
input=sys.stdin.readline
n,m,k=map(int,input().split())
c=[0]+list(map(int,input().split()))
a=[0]+list(map(int,input().split()))
def solve2():
global m
ans=0
for i in range(1,n+1):
ans=max(ans,min(m,a[i]))
if i<len(c):
m-=c[i]
print(ans)
if k==1:
solve2()
7.5分(洛谷部分分有误)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll n,m,k;
ll a[N],c[N],s[N];
void solve2(){
ll ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,min(m,a[i]));
m-=c[i];
}
cout<<ans;
}
bool cmp(const ll &a,const ll &b){
return a>b;
}
void solve1(){
for(int i=1;i<=n-1;i++){
s[i]=s[i-1]+c[i];
}
ll ans=0;
for(int r=1;r<=n;r++){
if(s[r-1]>m) break;
ll t=m-s[r-1];
vector<ll> v;
for(int l=1;l<=r;l++) v.push_back(a[l]);
sort(v.begin(),v.end(),cmp);
ll sum=0;
int cnt=0;
for(int i=0;i<v.size() && cnt<k;i++,cnt++){
ll take=min(t,v[i]);
sum+=take;
t-=take;
if(t==0) break;
}
ans=max(ans,sum);
}
cout<<ans<<"\n";
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n-1;i++) cin>>c[i];
for(int i=1;i<=n;i++) cin>>a[i];
if(k==1){
solve2();
return 0;
}else{
solve1();
}
return 0;
}
import java.util.*;
public class Main {
static final int N=100010;
static long n,m,k;
static long[] a=new long[N];
static long[] c=new long[N];
static long[] s=new long[N];
static void solve2(){
long ans=0;
for(int i=1;i<=n;i++){
ans=Math.max(ans,Math.min(m,a[i]));
m-=c[i];
}
System.out.print(ans);
}
static void solve1(){
for(int i=1;i<=n-1;i++){
s[i]=s[i-1]+c[i];
}
long ans=0;
for(int r=1;r<=n;r++){
if(s[r-1]>m) break;
long t=m-s[r-1];
ArrayList<Long> v=new ArrayList<>();
for(int l=1;l<=r;l++) v.add(a[l]);
v.sort((x,y)->Long.compare(y,x));
long sum=0;
int cnt=0;
for(int i=0;i<v.size() && cnt<k;i++,cnt++){
long take=Math.min(t,v.get(i));
sum+=take;
t-=take;
if(t==0) break;
}
ans=Math.max(ans,sum);
}
System.out.println(ans);
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextLong();
m=sc.nextLong();
k=sc.nextLong();
for(int i=1;i<=n-1;i++) c[i]=sc.nextLong();
for(int i=1;i<=n;i++) a[i]=sc.nextLong();
if(k==1){
solve2();
}else{
solve1();
}
}
}
import sys
input=sys.stdin.readline
n,m,k=map(int,input().split())
c=[0]+list(map(int,input().split()))
a=[0]+list(map(int,input().split()))
s=[0]*(n+1)
def solve2():
global m
ans=0
for i in range(1,n+1):
ans=max(ans,min(m,a[i]))
if i<len(c):
m-=c[i]
print(ans)
def solve1():
for i in range(1,n):
s[i]=s[i-1]+c[i]
ans=0
for r in range(1,n+1):
if s[r-1]>m:
break
t=m-s[r-1]
v=a[1:r+1]
v.sort(reverse=True)
total=0
cnt=0
for val in v:
if cnt>=k:
break
take=min(t,val)
total+=take
t-=take
cnt+=1
if t==0:
break
ans=max(ans,total)
print(ans)
if k==1:
solve2()
else:
solve1()
第六题
1.5分
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll n,x,y,w;
struct node{
int f,cnt;
}a[N];
bool cmp(const node &x,const node &y){
return x.f<y.f;
}
void solve2(){
sort(a+1,a+n+1,cmp);
ll ans=0;
for(ll i=1;i<=n;i++){
int pos=a[i].f;
if(i==1){
ans+=x-pos+y-pos;
}else{
ans+=2*(y-pos);
}
}
cout<<ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>x>>y>>w;
bool f2=true;
for(int i=1;i<=n;i++){
cin>>a[i].f>>a[i].cnt;
if(a[i].cnt!=1) f2=false;
}
if(f2){
solve2();
}
return 0;
}
import java.util.*;
public class Main {
static class Node{
int f,cnt;
Node(int f,int cnt){
this.f=f;
this.cnt=cnt;
}
}
static long n,x,y,w;
static Node[] a;
static void solve2(){
Arrays.sort(a,1,(int)n+1,(p,q)->p.f-q.f);
long ans=0;
for(long i=1;i<=n;i+=w){
int pos=a[(int)i].f;
if(i==1){
ans+=x-pos+y-pos;
}else{
ans+=2*(y-pos);
}
}
System.out.print(ans);
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextLong();
x=sc.nextLong();
y=sc.nextLong();
w=sc.nextLong();
a=new Node[(int)n+1];
boolean f2=true;
for(int i=1;i<=n;i++){
int f=sc.nextInt();
int cnt=sc.nextInt();
a[i]=new Node(f,cnt);
if(cnt!=1) f2=false;
}
if(f2){
solve2();
}
}
}
import sys
input=sys.stdin.readline
n,x,y,w=map(int,input().split())
a=[(0,0)]*(n+1)
f2=True
a=list(a)
for i in range(1,n+1):
f,cnt=map(int,input().split())
a[i]=(f,cnt)
if cnt!=1:
f2=False
def solve2():
arr=sorted(a[1:],key=lambda x:x[0])
ans=0
i=0
while i<n:
pos=arr[i][0]
if i==0:
ans+=x-pos+y-pos
else:
ans+=2*(y-pos)
i+=w
print(ans)
if f2:
solve2()
5.25
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll n,x,y,w;
struct node{
int f,cnt;
}a[N];
bool cmp(const node &x,const node &y){
return x.f<y.f;
}
void solve3(){
sort(a+1,a+n+1,cmp);
ll ans=0;
for(ll i=1;i<=n;i++){
int pos=a[i].f;
if(i==1){
ans+=x-pos+y-pos+(a[i].cnt/w-1)*2*(y-pos);
}else{
ans+=2*(y-pos)*(a[i].cnt/w);
}
}
cout<<ans;
}
void solve2(){
sort(a+1,a+n+1,cmp);
ll ans=0;
for(ll i=1;i<=n;i+=w){
int pos=a[i].f;
if(i==1){
ans+=x-pos+y-pos;
}else{
ans+=2*(y-pos);
}
}
cout<<ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>x>>y>>w;
bool f2=true,f3=true;
for(int i=1;i<=n;i++){
cin>>a[i].f>>a[i].cnt;
if(a[i].cnt!=1) f2=false;
if(a[i].cnt%w!=0) f3=false;
}
if(f2){
solve2();
}else{
solve3();
}
return 0;
}
import java.util.*;
public class Main {
static class Node{
int f,cnt;
Node(int f,int cnt){
this.f=f;
this.cnt=cnt;
}
}
static long n,x,y,w;
static Node[] a;
static void solve3(){
Arrays.sort(a,1,(int)n+1,(p,q)->p.f-q.f);
long ans=0;
for(long i=1;i<=n;i+=w){
int pos=a[(int)i].f;
if(i==1){
ans+=x-pos+y-pos+(a[(int)i].cnt/w-1)*2*(y-pos);
}else{
ans+=2*(y-pos)*(a[(int)i].cnt/w);
}
}
System.out.print(ans);
}
static void solve2(){
Arrays.sort(a,1,(int)n+1,(p,q)->p.f-q.f);
long ans=0;
for(long i=1;i<=n;i+=w){
int pos=a[(int)i].f;
if(i==1){
ans+=x-pos+y-pos;
}else{
ans+=2*(y-pos);
}
}
System.out.print(ans);
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextLong();
x=sc.nextLong();
y=sc.nextLong();
w=sc.nextLong();
a=new Node[(int)n+1];
boolean f2=true,f3=true;
for(int i=1;i<=n;i++){
int f=sc.nextInt();
int cnt=sc.nextInt();
a[i]=new Node(f,cnt);
if(cnt!=1) f2=false;
if(cnt%w!=0) f3=false;
}
if(f2){
solve2();
}else{
solve3();
}
}
}
import sys
input=sys.stdin.readline
n,x,y,w=map(int,input().split())
a=[(0,0)]*(n+1)
f2=True
f3=True
a=list(a)
for i in range(1,n+1):
f,cnt=map(int,input().split())
a[i]=(f,cnt)
if cnt!=1:
f2=False
if cnt%w!=0:
f3=False
def solve3():
arr=sorted(a[1:],key=lambda x:x[0])
ans=0
i=0
while i<n:
pos=arr[i][0]
cnt=arr[i][1]
if i==0:
ans+=x-pos+y-pos+(cnt//w-1)*2*(y-pos)
else:
ans+=2*(y-pos)*(cnt//w)
i+=1
print(ans)
def solve2():
arr=sorted(a[1:],key=lambda x:x[0])
ans=0
i=0
while i<n:
pos=arr[i][0]
if i==0:
ans+=x-pos+y-pos
else:
ans+=2*(y-pos)
i+=w
print(ans)
if f2:
solve2()
else:
solve3()
15分
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll n,x,y,w;
struct node{
ll f,cnt;
}a[N];
bool cmp(const node &x,const node &y){
return x.f<y.f;
}
void solve3(){
sort(a+1,a+n+1,cmp);
ll ans=0;
for(ll i=1;i<=n;i++){
ll pos=a[i].f;
if(i==1){
ans+=abs(x-pos)+y-pos+(a[i].cnt/w-1)*2*(y-pos);
}else{
ans+=2*(y-pos)*(a[i].cnt/w);
}
}
cout<<ans;
}
void solve2(){
sort(a+1,a+n+1,cmp);
ll ans=0;
for(ll i=1;i<=n;i+=w){
ll pos=a[i].f;
if(i==1){
ans+=abs(x-pos)+y-pos;
}else{
ans+=2*(y-pos);
}
}
cout<<ans;
}
void solve4(){
sort(a+1,a+n+1,cmp);
ll ans=0,ret=0;
bool first=true;
for(int i=1;i<=n;i++){
ll pos=a[i].f,cnt=a[i].cnt;
if(first){
ans+=abs(x-pos)+(y-pos);
first=false;
ll take=min(cnt,w);
cnt-=take;
ret=w-take;
}else{
ll take=min(cnt,ret);
cnt-=take;
ret-=take;
}
if(cnt==0) continue;
ans+=((cnt+w-1)/w)*2*(y-pos);
ret=(w-cnt%w)%w;
}
cout<<ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>x>>y>>w;
bool f2=true,f3=true;
for(int i=1;i<=n;i++){
cin>>a[i].f>>a[i].cnt;
if(a[i].cnt!=1) f2=false;
if(a[i].cnt%w!=0) f3=false;
}
if(f2){
solve2();
}else if(f3){
solve3();
}else{
solve4();
}
return 0;
}
import java.util.*;
public class Main {
static class Node{
long f,cnt;
Node(long f,long cnt){
this.f=f;
this.cnt=cnt;
}
}
static long n,x,y,w;
static Node[] a;
static void solve3(){
Arrays.sort(a,1,(int)n+1,(p,q)->Long.compare(p.f,q.f));
long ans=0;
for(long i=1;i<=n;i++){
long pos=a[(int)i].f;
if(i==1){
ans+=Math.abs(x-pos)+y-pos+(a[(int)i].cnt/w-1)*2*(y-pos);
}else{
ans+=2*(y-pos)*(a[(int)i].cnt/w);
}
}
System.out.print(ans);
}
static void solve2(){
Arrays.sort(a,1,(int)n+1,(p,q)->Long.compare(p.f,q.f));
long ans=0;
for(long i=1;i<=n;i+=w){
long pos=a[(int)i].f;
if(i==1){
ans+=Math.abs(x-pos)+y-pos;
}else{
ans+=2*(y-pos);
}
}
System.out.print(ans);
}
static void solve4(){
Arrays.sort(a,1,(int)n+1,(p,q)->Long.compare(p.f,q.f));
long ans=0,ret=0;
boolean first=true;
for(int i=1;i<=n;i++){
long pos=a[i].f,cnt=a[i].cnt;
if(first){
ans+=Math.abs(x-pos)+(y-pos);
first=false;
long take=Math.min(cnt,w);
cnt-=take;
ret=w-take;
}else{
long take=Math.min(cnt,ret);
cnt-=take;
ret-=take;
}
if(cnt==0) continue;
ans+=((cnt+w-1)/w)*2*(y-pos);
ret=(w-cnt%w)%w;
}
System.out.print(ans);
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextLong();
x=sc.nextLong();
y=sc.nextLong();
w=sc.nextLong();
a=new Node[(int)n+1];
boolean f2=true,f3=true;
for(int i=1;i<=n;i++){
long f=sc.nextLong();
long cnt=sc.nextLong();
a[i]=new Node(f,cnt);
if(cnt!=1) f2=false;
if(cnt%w!=0) f3=false;
}
if(f2){
solve2();
}else if(f3){
solve3();
}else{
solve4();
}
}
}
import sys
input=sys.stdin.readline
n,x,y,w=map(int,input().split())
a=[(0,0)]*(n+1)
f2=True
f3=True
a=list(a)
for i in range(1,n+1):
f,cnt=map(int,input().split())
a[i]=(f,cnt)
if cnt!=1:
f2=False
if cnt%w!=0:
f3=False
def solve3():
arr=sorted(a[1:],key=lambda x:x[0])
ans=0
for i in range(n):
pos,cnt=arr[i]
if i==0:
ans+=abs(x-pos)+y-pos+(cnt//w-1)*2*(y-pos)
else:
ans+=2*(y-pos)*(cnt//w)
print(ans)
def solve2():
arr=sorted(a[1:],key=lambda x:x[0])
ans=0
i=0
while i<n:
pos=arr[i][0]
if i==0:
ans+=abs(x-pos)+y-pos
else:
ans+=2*(y-pos)
i+=w
print(ans)
def solve4():
arr=sorted(a[1:],key=lambda x:x[0])
ans=0
ret=0
first=True
for pos,cnt in arr:
if first:
ans+=abs(x-pos)+(y-pos)
first=False
take=min(cnt,w)
cnt-=take
ret=w-take
else:
take=min(cnt,ret)
cnt-=take
ret-=take
if cnt==0:
continue
ans+=((cnt+w-1)//w)*2*(y-pos)
ret=(w-cnt%w)%w
print(ans)
if f2:
solve2()
elif f3:
solve3()
else:
solve4()