いまいちだった回。
https://codeforces.com/contest/1951/problem/D
問題
整数N,Kが与えられる。
AliceはN円を持っている。
Bobは、最大60種類のコイン販売所を設け、それぞれ1コインあたりの金額を定めることができる。各販売所では無限の枚数のコインを売っている。
Aliceは先頭から順に販売所を訪れ、手持ちの金額で買えるだけコインを買う。
Bobは、AliceにちょうどK枚買わせる値付けが可能か判定せよ。
解法
K=1やN=Kの時は、K円や1円の販売所を設ければよいので自明。
それ以外の場合、初手で1コインで残金を(K-1)円にさせられれば、残りを1円のコイン(K-1)枚買わせることができる。
int T; ll N,K; void solve() { int i,j,k,l,r,x,y; string s; cin>>T; while(T--) { cin>>N>>K; if(K==1) { cout<<"YES"<<endl; cout<<1<<endl; cout<<N<<endl; continue; } if(N==K) { cout<<"YES"<<endl; cout<<1<<endl; cout<<1<<endl; continue; } if((N-(K-1))*2>N) { cout<<"YES"<<endl; cout<<2<<endl; cout<<(N-(K-1))<<" "<<1<<endl; } else { cout<<"NO"<<endl; } } }
まとめ
こういう問題で躓くのもったいないな…。