CodeForces
来源:互联网 发布:淘宝商品信用卡套现 编辑:程序博客网 时间:2024/06/01 10:13
题目大意:
现在对于一个序列有如下操作,首先选取一个位置,该位置的数我们称作被处理数。被处理数的值和他的位置标号的和作为下一个新的被处理数的位置,现在告诉你m次操作的被处理数的位置分别是多少,问你是否可以找出一个1~n的全排列符合条件。
分析:
其实,O(max(m,n))的时间复杂度就够了,因为对于每一个当前被处理数的位置和上一个被处理数,都可以求得当前被处理数位置上的值。这样我只要扫一遍O(m)就能得到为了满足要求各个位置的值是多少了。然后对于其他值没有确定的位置,我只要依次填入1~n不重复的数字就可以了。
代码:
#include<bits/stdc++.h>using namespace std;#define maxn 500int n,m;int appear[maxn]={0};int a[maxn]={0};int l[maxn]={0};bool flag=0;int main(){ scanf("%d%d%d",&n,&m,&l[0]); for(int i=1;i<m;i++) { scanf("%d",&l[i]); int t=(l[i]-l[i-1]>0)?(l[i]-l[i-1]):(l[i]-l[i-1]+n); //cout<<t<<" "; if(a[l[i-1]]!=0&&a[l[i-1]]!=t||appear[t]==1&&a[l[i-1]]==0) { flag=1; } else { appear[t]=1; a[l[i-1]]=t; } } if(flag==1) { printf("-1\n"); return 0; } int k=1; for(int i=1;i<n;i++) { while(appear[k]!=0) { k++; } printf("%d ",a[i]==0?k++:a[i]); } while(appear[k]!=0) { k++; } printf("%d\n",a[n]==0?k:a[n]);}
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- 字符串子串(网易2017春招笔试题)
- vuex 2.0学习心得(中) mutation&action
- Android Stuido环境搭建
- cocos2dx判断TTF字体库是否有不支持的字体
- 针对 C#+mysql数据模型+dataGridview 进行的 : 增加 删除 修改 查询 (狗血剧情)
- CodeForces
- Java多线程——线程怎么来的?
- jquery中$.proxy及wrap()的使用
- Cocos2d-x里面如何实现MVC(五)
- 删除分区表里某个分区的数据
- 读懂源码系列-FileZilla Server 设计原则分析-socket 事件处理流程(4)
- 数字货币开发过程中常用的算法有哪些?比如SHA256
- docker-容器
- 解题报告:Codeforces Round #433 (Div. 2) E. Boredom ( 离线处理+树状数组)