A - Orders

statements
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
using namespace std;
pair<int,int> p[110];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--){
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>p[i].fi>>p[i].se;
sort(p+1,p+n+1);
int now=0;
bool flag=1;
for(int i=1;i<=n;i++){
now+=(p[i].fi-p[i-1].fi)*k;
now-=p[i].se;
if(now<0){
cout<<"No\n";
flag=0;
break;
}
}
if(flag) cout<<"Yes\n";
}
return 0;
}
I - Three Dice

statements
#include <bits/stdc++.h>
#define int long long
using namespace std;
bool check(int x){
if(x==1||x==4) return 1;
return 0;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int a,b;
cin>>a>>b;
map<pair<int,int>,int> mp;
for(int i=1;i<=6;i++){
for(int j=1;j<=6;j++){
for(int k=1;k<=6;k++){
int xa=0,xb=0;
if(check(i)) xa+=i;
else xb+=i;
if(check(j)) xa+=j;
else xb+=j;
if(check(k)) xa+=k;
else xb+=k;
mp[make_pair(xa,xb)]=1;
}
}
}
if(mp.count({a,b})==0) cout<<"No\n";
else cout<<"Yes\n";
return 0;
}
G - Matching

statements
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int a[N];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--){
int n;
cin>>n;
unordered_map<int,vector<int>> mp;
for(int i=1;i<=n;i++){
cin>>a[i];
mp[a[i]-i].push_back(a[i]);
}
int ans=0;
for(auto p:mp){
vector<int> vec=p.second;
sort(vec.begin(),vec.end(),greater<int>());
int m=vec.size();
for(int i=0;i+1<m;i+=2){
if(vec[i]+vec[i+1]<0) break;
ans+=vec[i]+vec[i+1];
}
}
cout<<ans<<'\n';
}
return 0;
}
D - Fast and Fat

statements
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int v[N],w[N];
int n;
bool check(int x){
vector<int> P,Q;
for(int i=1;i<=n;i++){
if(v[i]>=x) P.push_back(v[i]+w[i]-x);
else Q.push_back(w[i]);
}
sort(P.begin(),P.end(),greater<int>());
sort(Q.begin(),Q.end(),greater<int>());
int siz_p=P.size();
int siz_q=Q.size();
if(siz_p<siz_q) return 0;
else{
for(int i=0;i<siz_q;i++)
if(P[i]<Q[i]) return 0;
return 1;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
int r=*max_element(v+1,v+n+1),l=0;
int ans=0;
while(l<=r){
int mid=(l+r)>>1;
if(check(mid)) ans=mid,l=mid+1;
else r=mid-1;
}
cout<<ans<<'\n';
}
return 0;
}
L - Puzzle: Sashigane

statements

solutions
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n,i,j;
cin>>n>>i>>j;
int U=i,D=i;
int L=j,R=j;
cout<<"Yes\n"<<n-1<<'\n';
for(int k=0;k<n;k++){
if(L>1&&U>1){
L--,U--;
cout<<U<<' '<<L<<' '<<D-U<<' '<<R-L<<'\n';
}
else if(L>1&&D<n){
L--,D++;
cout<<D<<' '<<L<<' '<<U-D<<' '<<R-L<<'\n';
}
else if(R<n&&U>1){
R++,U--;
cout<<U<<' '<<R<<' '<<D-U<<' '<<L-R<<'\n';
}
else if(R<n&&D<n){
R++,D++;
cout<<D<<' '<<R<<' '<<U-D<<' '<<L-R<<'\n';
}
}
return 0;
}

statements