Codeforces 141C【构造】
来源:互联网 发布:windows 10声音咋调 编辑:程序博客网 时间:2024/05/01 12:07
题意
有n个在排队,现给出n个人前面有多少个人比他的个数,让你构造这个排列。
思路
一种想法:我们现在知道每个人前面有多少个人,那么我们构造这个人的序列。先把给出的数量进行排序,我们可以知道每个位置之前人比他高数量最多的情况是
直接模拟下来,把每个人都放到
Code:
#include<iostream>#include<cstdio>#include<cstring>#include<stack>#include<map>#include<queue>#include<cmath>#include<algorithm>#include<deque>using namespace std;typedef long long LL;//#pragma comment(linker, "/STACK:102400000,102400000")const double PI = acos(-1.0);const double eps = 1e-6;const int N = 3e3+10;const int INF=1e9;struct asd{ char name[15]; int num;}p[N];int mp[N];int n,cnt[N];bool cmp(asd x,asd y){ return x.num<y.num;}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%s%d",p[i].name,&p[i].num); sort(p+1,p+n+1,cmp); memset(cnt,-1,sizeof(cnt)); for(int i=1;i<=n;i++){ if(p[i].num>i-1){ puts("-1"); return 0; } int pos=p[i].num+1; int temp,t; temp=cnt[pos]; cnt[pos]=i; mp[i]=pos; t=pos+1; while(temp!=-1) { int tt=cnt[t]; cnt[t]=temp; mp[temp]=t; temp=tt; t++; } } for(int i=1;i<=n;i++) p[cnt[i]].num = INF-i+1; for(int i=1;i<=n;i++) printf("%s %d\n",p[i].name,p[i].num); return 0;}
阅读全文
0 0
- Codeforces 141C【构造】
- Codeforces 141C Queue 【构造】
- CodeForces 600C【构造】
- CodeForces 110C 【构造】
- CodeForces 828C【构造】
- Codeforces 862C(构造)
- Codeforces 417C Football(构造)
- Codeforces 489C 简单构造
- [构造]CodeForces 613C Necklace
- codeforces 740C mex 构造
- Codeforces 487C 数论+构造
- CodeForces-707c[数学构造]
- Codeforces 398C Tree and Array(构造)
- Codeforces 346C Number Transformation II 构造
- CodeForces 21C Stripe 2 构造题
- CodeForces 26C Parquet 构造题
- Codeforces 459C Pashmak and Buses(构造)
- Codeforces 362C. Insertion Sort【构造】
- 实验吧——WriteUp&&涨姿势(3)
- hadoop 递归列出文件
- C/C++ 将 字符串 赋给char[]
- OPECNCV WINDOWS FOR VS2013环境搭建
- jQuery鼠标悬停展示详情
- Codeforces 141C【构造】
- 史上最简单的手机app教程 基于Corona SDK(3)
- mybatis和hibernate的配置----个人笔记
- UVA 116记忆化搜索
- 数组变换
- python工具_正则表达式
- Arraylist的初步使用
- markdown中实现首行缩进的两种方法
- 去除集合中自定义对象的重复值(对象的成员变量值都相同)