首页 > 代码库 > Codeforces Round #262 (Div. 2)

Codeforces Round #262 (Div. 2)

A

 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<vector> 7 #include<cmath> 8 #include<queue> 9 #include<set>10 using namespace std;11 #define N 10000012 #define LL long long13 #define INF 0xfffffff14 const double eps = 1e-8;15 const double pi = acos(-1.0);16 const double inf = ~0u>>2;17 int n,m;18 int main()19 {20     int n,m,i,j;21     cin>>n>>m;22     if(m>n)23     cout<<n<<endl;24     else25     {26         int o = 0;27         while(n)28         {29             n--;30             o++;31             if(o%m==0) n++;32         }33         cout<<o<<endl;34     }35     return 0;36 }
View Code

 

B

枚举和值

 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<vector> 7 #include<cmath> 8 #include<queue> 9 #include<set>10 using namespace std;11 #define N 10000012 #define LL long long13 #define INF 0xfffffff14 #define M 100000000015 const double eps = 1e-8;16 const double pi = acos(-1.0);17 const double inf = ~0u>>2;18 int o[N];19 int judge(LL x)20 {21     int ans = 0;22     while(x)23     {24         ans+=x%10;25         x/=10;26     }27     return ans;28 }29 int main()30 {31     int a,b,c,i,j;32     cin>>a>>b>>c;33     int g = 0;34     for(i = 1; i <= 100 ; i++)35     {36         LL k = (LL)b*pow(i*1.0,a)+c;37         if(judge(k)==i&&k>0&&k<M)38         o[++g] = k;39     }40     cout<<g<<endl;41     if(g)42     {43 44 45     sort(o+1,o+g+1);46     for(i = 1; i < g ; i ++)47     cout<<o[i]<<" ";48     cout<<o[i]<<endl;49     }50     return 0;51 }
View Code

 

C

二分高度,之后用高度减去原有高度,就可以知道每株花被浇了多少水,用线段树维护一下就可以得到最少浇水的次数。

  1 #include <iostream>  2 #include<cstdio>  3 #include<cstring>  4 #include<algorithm>  5 #include<stdlib.h>  6 #include<vector>  7 #include<cmath>  8 #include<queue>  9 #include<set> 10 using namespace std; 11 #define N 100010 12 #define LL long long 13 #define INF 0xfffffff 14 #define M 1000200000 15 const double eps = 1e-8; 16 const double pi = acos(-1.0); 17 const double inf = ~0u>>2; 18 int a[N],o[N]; 19 LL s[N<<2]; 20 int n,m,w; 21 void build(int l,int r,int w) 22 { 23     s[w] = 0; 24     if(l==r) 25     { 26         s[w] = o[l]; 27         return ; 28     } 29     int m = (l+r)>>1; 30     build(l,m,w<<1); 31     build(m+1,r,w<<1|1); 32 } 33 void down(int w,int m) 34 { 35     if(s[w]) 36     { 37         s[w<<1] += s[w]; 38         s[w<<1|1] += s[w]; 39         s[w] = 0; 40     } 41 } 42 void update(int a,int b,int d,int l,int r,int w) 43 { 44     if(a<=l&&b>=r) 45     { 46         s[w]+=d; 47         return ; 48     } 49     down(w,r-l+1); 50     int m = (l+r)>>1; 51     if(a<=m) update(a,b,d,l,m,w<<1); 52     if(b>m) update(a,b,d,m+1,r,w<<1|1); 53 } 54 LL query(int p,int l,int r,int w) 55 { 56     if(l==r) 57         return s[w]; 58     down(w,r-l+1); 59     int m = (l+r)>>1; 60     if(p<=m) return query(p,l,m,w<<1); 61     else return query(p,m+1,r,w<<1|1); 62 } 63 int cal(int k) 64 { 65     int i,j; 66     for(i = 1; i <= n; i++) 67         if(k>a[i]) o[i] = k-a[i]; 68         else o[i] = 0; 69     build(1,n,1); 70     LL num = 0; 71     for(i = 1; i <= n; i++) 72     { 73         int pp = query(i,1,n,1); 74          75         76         if(pp>0) {update(i,min(n,i+w-1),-pp,1,n,1);num+=pp;} if(num>m) return 0; 77     } 78     if(num<=m) return 1; 79     return 0; 80 } 81 int main() 82 { 83     int i,j; 84     cin>>n>>m>>w; 85     for(i = 1; i <= n; i++) 86         scanf("%d",&a[i]); 87     int low = 1,high = M,mid; 88     int ans = 1; 89     while(low<=high) 90     { 91         mid = (low+high)>>1; 92         if(cal(mid)==0) 93             high = mid-1; 94         else 95         { 96             low = mid+1; 97             ans = max(ans,mid); 98         } 99     }100     cout<<ans<<endl;101     return 0;102 }
View Code

 

D

对于

k=1 ,ans = L。

连续偶奇异或是为1的 比如10 11    12 13等 ,而奇偶则是不一定的

k= 2, 如果l%2==0,ans = L^(L+1)=1 ,否则要根据R-L+1的取值决定

k= 4 ,如果L%2=0,ans = L^(L+1)^(L+2)^(L+3)  = 0,否则如果R-L+1>4 也是为偶奇偶奇=0的,若R-L+1=4 就可转化为3的时候做。

k=3 ,有可能为1也有可能为0 ,假设L-R范围内的三个数x,y,z异或为0,x,y,z不同,就设x>y>z,那么x,y已确定,那么就是尽可能让z大,

比如 

x  100110001111   那么y值的第一位一定为1,不然z就为1就不符合假设y>z了,因为y<x,所以之后遇到x为0的位,y,z也是为0的,一旦再遇到一位1,就可以把y置为0,z置为1,再之后z就可以一直为1,而y的变化可以依据x,z而定。

x  100110001111...1

y  100001110000...0

z  000111111111...1

这样z将获得<R的最大值,再与L相比较就可以知道结果了。

 

  1 #include <iostream>  2 #include<cstdio>  3 #include<cstring>  4 #include<algorithm>  5 #include<stdlib.h>  6 #include<vector>  7 #include<cmath>  8 #include<queue>  9 #include<set> 10 using namespace std; 11 #define N 100000 12 #define LL long long 13 #define INF 0xfffffff 14 const double eps = 1e-8; 15 const double pi = acos(-1.0); 16 const double inf = ~0u>>2; 17 LL a[10]; 18 int di[50]; 19 void judge(LL l,LL r) 20 { 21     LL x = r; 22     LL i; 23     int g = 0; 24     while(x) 25     { 26         di[g++] = x%2; 27         x/=2; 28     } 29     LL y = 0; 30     LL z = 0; 31     int flag = 0; 32     y+=((LL)1<<(g-1)); 33     for(i = g-2 ; i >= 0 ; i--) 34     { 35         if(di[i]) 36         { 37             flag = 1; 38             z += ((LL)1<<i); 39         } 40         else if(flag) 41         { 42             z+=((LL)1<<i); 43             y+=((LL)1<<i); 44         } 45     } 46     if(z>=l) 47     { 48         cout<<"0\n"; 49         cout<<"3\n"; 50         cout<<r<<" "<<y<<" "<<z<<endl; 51     } 52     else 53     { 54         cout<<"1\n"; 55         cout<<"2\n"; 56         if(l%2) 57         cout<<l+1<<" "<<l+2<<endl; 58         else 59         cout<<l<<" "<<l+1<<endl; 60     } 61 } 62 int main() 63 { 64     LL l,r,i,k; 65     cin>>l>>r>>k; 66     if(r==l) 67     { 68         cout<<l<<endl; 69         cout<<"1\n"; 70         cout<<l<<endl; 71         return 0; 72     } 73     if(l%2==0) 74     { 75         if(r-l+1==2||k<=2) 76         { 77             if(k==1) 78             { 79                 cout<<l<<endl; 80                 cout<<"1\n"; 81                 cout<<l<<endl; 82             } 83             else 84             { 85                 cout<<"1\n"; 86                 cout<<"2\n"; 87                 cout<<l<<" "<<l+1<<endl; 88             } 89         } 90         else if(r-l+1==3||k==3) 91         { 92             judge(l,r); 93         } 94         else 95         { 96             cout<<"0\n"; 97             cout<<"4\n"; 98             for(i = l  ; i < l + 4 ; i++) 99                 cout<<i<<" ";100             puts("");101         }102     }103     else104     {105         if(r-l+1==2||k<=2)106         {107             if(k==1||(r-l+1==2&&(l^(l+1))>l))108             {109                 cout<<l<<endl;110                 cout<<"1\n";111                 cout<<l<<endl;112             }113             else114             {115                 if(r-l+1==2)116                 {117                     cout<<(l^(l+1))<<endl;118                     cout<<"2\n";119                     cout<<l<<" "<<l+1<<endl;120                 }121                 else122                 {123                     cout<<"1\n";124                     cout<<"2\n";125                     cout<<l+1<<" "<<l+2<<endl;126                 }127             }128         }129         else if(r-l+1==3||k==3)130         {131             judge(l,r);132         }133         else if(r-l+1==4)134         {135             int flag = 0;136             judge(l,r);137         }138         else139         {140             cout<<"0\n";141             cout<<"4\n";142             for(i = l+1 ; i < l+5 ; i++)143                 cout<<i<<" ";144             puts("");145         }146 147     }148     return 0;149 }
View Code

 

Codeforces Round #262 (Div. 2)