首页 > 代码库 > 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 }
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 }
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 }
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 }
Codeforces Round #262 (Div. 2)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。