CF964(div4)补题G1G2
G1. Ruler (easy version)
题意:形式为?1y,如果y<x,则相应y,如果y>=x,则相应y+1
分析:用二分搜索最终值,在二分里输入x
代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; void sol(){int l=2,r=1000;while(l<r){int mid=(l+r)/2;cout<<"? 1 "<<mid<<endl;int x;cin>>x;if(x==mid)l=mid+1;else r=mid;}cout<<"! "<<l<<endl; } int main(){int t;cin>>t;while(t--)sol();return 0; }
G2. Ruler (hard version)
题意:形式为?a b,如果a<b<x,则相应a×b,如果a<x<=b,则相应a×(b+1),如果x<=a<b,则响应(a+1)(b+1)
分析:用三分搜索每次的a和b,在三分里输入x
代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; void sol(){int l=1,r=999;while(l<r-2){int a=(2*l+r)/3;int b=(2*r+l)/3;cout<<"? "<<a<<" "<<b<<endl;int x;cin>>x;if(x==(a+1)*(b+1))r=a;else if(x==a*b)l=b;else{l=a;r=b;}}if(r-l==2){cout<<"? 1 "<<l+1<<endl;int x;cin>>x;if(x==l+1)l+=1;else r=l+1;}cout<<"! "<<r<<endl; } int main(){int t;cin>>t;while(t--)sol();return 0; }