cf1707A Doremy's IQ
作者:互联网
思路:
对这种不是直接二分答案的二分不是很熟悉,记录一下。
实现:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[100005]; 4 bool check(int x,int n,int q){ 5 6 for(int i=x;i<n;i++){ 7 if(a[i]>q){ 8 if(q){ 9 q--; 10 } 11 else{ 12 return false; 13 } 14 } 15 } 16 return true; 17 18 } 19 int main(){ 20 //freopen("in.txt","r",stdin); 21 int t;cin>>t; 22 while(t--){ 23 int n,q;cin>>n>>q; 24 for(int i=0;i<n;i++){ 25 cin>>a[i]; 26 } 27 int l=0,r=n,res=n; 28 while(l<=r){ 29 int m=l+r>>1; 30 if(check(m,n,q)){ 31 res=m; 32 r=m-1; 33 } 34 else{ 35 l=m+1; 36 } 37 } 38 string s=""; 39 for(int i=0;i<n;i++){ 40 if(i<res){ 41 if(a[i]<=q){ 42 s+='1'; 43 } 44 else{ 45 s+='0'; 46 } 47 } 48 else{ 49 if(a[i]>q){ 50 if(q){ 51 s+='1'; 52 q--; 53 } 54 else{ 55 s+='0'; 56 } 57 } 58 else{ 59 s+='1'; 60 } 61 } 62 } 63 cout<<s<<endl; 64 } 65 66 return 0; 67 }
标签:IQ,res,Doremy,while,else,int,cf1707A,--,check 来源: https://www.cnblogs.com/wangyiming/p/16488001.html