Codeforces Round #418 (Div. 2)-B. An express train to reveries-思维
来源:互联网 发布:js删除cookie 编辑:程序博客网 时间:2024/05/20 18:41
给定一个串a和b
问你合成一个p
p和ab各有一个数字不用
我的方法是枚举两种情况。
1 当ab只有一个地方位置不同时,那么把这个位置换做没有出现过的i
2 当俩位置时,暴力枚举。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <vector>using namespace std;const int maxn=1005;int main(){ int m; vector< pair<pair<int,int>,int> >q; bool vis[maxn]; int a[maxn]; int b[maxn]; memset(vis,false,sizeof(vis)); scanf("%d",&m); for(int i=1;i<=m;i++){ scanf("%d",&a[i]); } for(int i=1;i<=m;i++){ scanf("%d",&b[i]); } for(int i=1;i<=m;i++){ if(a[i]!=b[i]){ //q.push_back(make_pair(a[i],b[i])); } else vis[a[i]]=true; } int ss[maxn]; for(int i=1;i<=m;i++){ if(a[i]!=b[i]){ q.push_back(make_pair(make_pair(a[i],b[i]),i)); } else {vis[a[i]]=true; ss[i]=a[i]; } } if(q.size()==2){ if(!vis[q[0].first.first]&&!vis[q[1].first.second]) { ss[q[0].second]=q[0].first.first; ss[q[1].second]=q[1].first.second; } else if(!vis[q[1].first.first]&&!vis[q[0].first.second]) {ss[q[1].second]=q[1].first.first; ss[q[0].second]=q[0].first.second; } } else { for(int i=1;i<=m;i++){ if(!vis[i]){ ss[q[0].second]=i;break; } } } for(int i=1;i<=m;i++){ printf("%d ",ss[i]); } printf("\n"); return 0;}
第二个大佬的思想和我的差不多,
不过有一个地方不一样,他是求每一个没出现的数。
#include <bits/stdc++.h>#define MAXN 1005#define LL long longusing namespace std;int n;int a[MAXN];int visa[MAXN];int b[MAXN];int visb[MAXN];int c[MAXN];int main(int argc, char *argv[]){ // freopen("in.txt","r",stdin); scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); visa[a[i]]=true; } for(int i=0;i<n;i++){ scanf("%d",&b[i]); visb[b[i]]=true; } vector<int>v; for(int i=0;i<n;i++){ if(a[i]==b[i]){ c[i]=a[i]; }else{ c[i]=0; v.push_back(i); } } if(v.size()==1){//只有一个的时候 for(int i=1;i<=n;i++){ if(visa[i]==false&&visb[i]==false){ c[v[0]]=i; break; } } }else{//有两个位置不同的时候 int tmp1,tmp2; for(int i=1;i<=n;i++){ if(visa[i]==false) tmp1=i; if(visb[i]==false) tmp2=i; //a没出现过的数,b没出现过的数。 } c[v[0]]=tmp1; c[v[1]]=tmp2; int cur=0; for(int i=0;i<n;i++){ if(a[i]!=c[i]){ cur++; } } for(int i=0;i<n;i++){ if(b[i]!=c[i]){ cur++; } } if(cur>2){ swap(c[v[0]],c[v[1]]); } } for(int i=0;i<n;i++){ printf(i==0?"%d":" %d",c[i]); } printf("\n"); return 0;}
#include <bits/stdc++.h>/*我的思路是发现最多不同的地方只有两个。当为1的时候,肯定把两个都没有的i输出。当为2的时候,分为两种情况,如果一种不可以,另一种一定可以。第一个位置放a数组的数,二个位置为b或者相反。大神的思路:可以肯定的是第一个数组中最多只有一种数字会出现两次。还有就是正常出现的情况,除此之外没有其他情况。判断当哪个数字出现两次时,用那个没有出现的来判断。另一个大神的写法和我的差不多。*/using namespace std;const int maxn=2000;int a[maxn];int b[maxn];int m;bool jud(){ int c=0; for(int i=1;i<=m;i++){ if(a[i]!=b[i]) c++; } if(c==1)return true; return false;}int main(){ int vis[maxn]; memset(vis,0,sizeof(vis)); scanf("%d",&m); for(int i=1;i<=m;i++){ scanf("%d",&a[i]); vis[a[i]]++; } for(int i=1;i<=m;i++){ scanf("%d",&b[i]); } int t; for(int i=1;i<=m;i++){ if(!vis[i]) t=i; } for(int i=1;i<=m;i++){ if(vis[a[i]]==2){ int old=a[i]; a[i]=t; if(jud())break; a[i]=old; } } for(int i=1;i<=m;i++){ if(i==1){ printf("%d",a[i]); } else printf(" %d",a[i]); } printf("\n"); return 0;}
阅读全文
0 0
- Codeforces Round #418 (Div. 2)-B. An express train to reveries-思维
- Codeforces Round #418 (Div. 2) problem B. An express train to reveries
- Codeforces Round #418 (Div. 2) B. An express train to reveries
- Codeforces Round #418 B--An express train to reveries
- codeforces 814B An express train to reveries(思维)
- codeforces B. An express train to reveries
- 【Codeforces 814 B. An express train to reveries】+ 构造
- codeforces 814B An express train to reveries
- codeforces 814B An express train to reveries
- Codeforces 814B-An express train to reveries
- Codeforces 814 B An express train to reveries
- codeforces 814 B An express train to reveries
- CodeForces 814B An express train to reveries
- codeforces An express train to reveries 814B
- CodeForces-814B An express train to reveries 解题报告
- An express train to reveries CodeForces
- 814/ B. An express train to reveries
- B. An express train to reveries
- Caffe Window 和 ubuntu编译安装
- html整理
- python包的导入
- 冒泡排序的三种实现
- IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
- Codeforces Round #418 (Div. 2)-B. An express train to reveries-思维
- 自学qt之新建菜单,文件 QtextEdit 打开保存文件 设置字体
- C++之智能指针shared_ptr
- Box
- 51Nod 1084 矩阵取数问题
- mmc子系统总结
- 限制容器对CPU的使用
- NOIP2005普及组第四题
- js的打印(输出)方式console.log(),console.dir(),console.table()