其他分享
首页 > 其他分享> > cf1707A Doremy's IQ

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