Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)
Posted walfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)相关的知识,希望对你有一定的参考价值。
爆炸场,A被hack两次,a,c都看错题意。。。还是太菜了
A水题,ifelse写的太搓了被hack。。
#include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pii pair<int,int> #define C 0.5772156649 #define pi acos(-1.0) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-7; const int N=500000+10,maxn=sqrt(N)+10,inf=0x3f3f3f; int main() { ios::sync_with_stdio(false); cin.tie(0); int n,a,b,c; cin>>n>>a>>b>>c; n--; if(n==0)cout<<0<<endl; else { if(c<=a&&c<=b)cout<<(n-1)*c+min(a,b)<<endl; else { cout<<n*min(a,b)<<endl; } } return 0; } /******************** ********************/
B也是瞎搞,找间距是k的倍数,直接取模计数
#include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pii pair<int,int> #define C 0.5772156649 #define pi acos(-1.0) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-7; const int N=100000+10,maxn=sqrt(N)+10,inf=0x3f3f3f; int a[N]; map<int,int>b; int main() { ios::sync_with_stdio(false); cin.tie(0); int n,m,k; cin>>n>>k>>m; for(int i=0;i<n;i++) { cin>>a[i]; b[a[i]%m]++; } int id=-1; for(int i=0;i<m;i++) { if(b[i]>=k) { id=i; break; } } if(id>=0) { cout<<"Yes"<<endl; vector<int>v; for(int i=0;i<n;i++) { if(a[i]%m==id) v.pb(a[i]); } for(int i=0;i<k;i++)cout<<v[i]<<" "; cout<<endl; } else cout<<"No"<<endl; return 0; } /******************** ********************/
C找十进制每一位加到自身等于一个数,直接枚举1到81,用n挨个减,判断就好了
#include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pii pair<int,int> #define C 0.5772156649 #define pi acos(-1.0) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-7; const int N=100000+10,maxn=sqrt(N)+10,inf=0x3f3f3f; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin>>n; vector<int>v; for(int i=1;i<=81;i++) { int sum=0,s=n-i; while(s) { sum+=s%10; s/=10; } if(sum==i)v.pb(n-i); } sort(v.begin(),v.end()); cout<<v.size()<<endl; for(int i=0;i<v.size();i++) cout<<v[i]<<endl; return 0; } /******************** ********************/
D题意:每次把第i位放一个东西,操作要求把所有的东西放到最后。解法:遍历一遍,同时维护一个最后一位输出就好了
#include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pii pair<int,int> #define C 0.5772156649 #define pi acos(-1.0) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-7; const int N=300000+10,maxn=sqrt(N)+10,inf=0x3f3f3f; int s[N]; int main() { ios::sync_with_stdio(false); cin.tie(0); int n,cnt; cin>>n; cnt=n; cout<<1<<"\n"; for(int i=1;i<=n;i++) { int a; cin>>a; s[a]++; if(a==cnt) { while(cnt>0&&s[cnt])cnt--; } cout<<cnt-n+i+1<<"\n"; } return 0; } /******************** ********************/
E题意:有n个类似字符串a,A的东西,然后刚开始是小写,可以把某几个改成大写,要求最后结果是按字符串递增的
题解:用一个数组维护不能改变的数,还有一个维护已经改变的数,用vector存必须同时改变的数,当需要改变时dfs容器,看有没有产生冲突,每两个字符串找第一个不相同的字符,此时只有八种情况,挨个枚举就行了,分别是(1,2)(1‘,2)(1,2’)(1‘,2’)(2,1)(2’,1)(2,1‘)(2’,1‘)
#include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pii pair<int,int> #define C 0.5772156649 #define pi acos(-1.0) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-7; const int N=100000+10,maxn=sqrt(N)+10,inf=0x3f3f3f; bool ca[N],no[N],f; int sz[N]; vector<int>s[N]; vector<int>v[N]; void dfs(int u) { if(no[u]) { f=1; return ; } else ca[u]=1; for(int i=0;i<v[u].size()&&!f;i++) { dfs(v[u][i]); } } void fuck(int p1,int p2) { if(p1>p2) { if(!ca[p1]&&!ca[p2]) { f=0; dfs(p1); if(f) { puts("No"); exit(0); } else no[p2]=1; } else if(ca[p1]&&!ca[p2]) { no[p2]=1; } else { puts("No"); exit(0); } } else { if(!ca[p1]&&ca[p2]) { f=0; dfs(p1); if(f) { puts("No"); exit(0); } } else if(!ca[p1]&&!ca[p2]) { v[p2].pb(p1); } } } int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&sz[i]); s[i].clear(); for(int j=0;j<sz[i];j++) { int a; scanf("%d",&a); s[i].pb(a); } } for(int i=2;i<=n;i++) { if(s[i]==s[i-1])continue; else if(sz[i-1]>sz[i]) { bool ok=1; for(int j=0;j<s[i].size();j++) { if(s[i-1][j]!=s[i][j]) { fuck(s[i-1][j],s[i][j]); ok=0; break; } } if(ok) { puts("No"); return 0; } } else if(sz[i-1]<=sz[i]) { for(int j=0;j<s[i-1].size();j++) { if(s[i-1][j]!=s[i][j]) { fuck(s[i-1][j],s[i][j]); break; } } } } puts("Yes"); v[0].clear(); for(int i=1;i<=m;i++) if(ca[i]) v[0].pb(i); printf("%d\n",v[0].size()); for(int i=0;i<v[0].size();i++) printf("%d ",v[0][i]); puts(""); return 0; } /******************** ********************/
以上是关于Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #441 Div. 2题解
Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)
Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)