Codeforces 141C Queue【思维】
来源:互联网 发布:ubuntu怎么上传文件 编辑:程序博客网 时间:2024/04/19 21:45
题目大意:
一共有N个人,给你每个人前边比这个人高的数量,让你找一个合法的安排,如果找不到输出-1.
思路:(为了方便描述,我们将h【i】=x设定为第i个人前边有x个人比他高)
1、首先我们按照h【i】从小到大排序,如果有h【i】>=i的情况发现,那么一定说明是无解的。
2、如果有解我们继续分析:
①对于第i个人来讲,其前边比他高的人数有h【i】个,那么前边比他矮的人数有i-1-h【i】个,那么我们可以将第i个人的高度设定为i-h【i】,保证前边一定有i-h【i】-1个比他矮的人。
②那么我们按照排好序的顺序设定第i个人的高度为i-h【i】,但是直接这样设定,会影响前边人的高度,那么对应将当前这个人前边的所有大于等于当前人高度的人的高度都加一即可。
Ac代码:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{ char s[15]; int x;}a[3500];int cmp(node a,node b){ return a.x<b.x;}int ans[3500];int main(){ int n; while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) { scanf("%s%d",a[i].s,&a[i].x); } sort(a+1,a+n+1,cmp); int flag=0; for(int i=1;i<=n;i++) { if(a[i].x>=i)flag=1; ans[i]=i-a[i].x; for(int j=1;j<i;j++) { if(ans[j]>=ans[i]) { ans[j]++; } } } if(flag==1) { printf("-1\n"); continue; } for(int i=1;i<=n;i++) { printf("%s %d\n",a[i].s,ans[i]); } }}
0 0
- Codeforces 141C Queue【思维】
- codeforces C. Queue (思维)
- CodeForces 141C Queue
- Codeforces 141C Queue 【构造】
- codeforces C. Queue
- Codeforces 353D Queue【思维】好题~
- codeforces-141【B找规律】【C思维】
- 【codeforces 723C】 + 思维
- codeforces-750【C思维】
- Codeforces 842C(思维)
- codeforces 250/C 逆向思维
- Codeforces 651 C Watchmen【思维】
- codeforces-257【C思维,数学】
- codeforces-337【C思维,贪心】
- 【codeforces 233C Cycles】+ 思维
- codeforces-757-【B、C思维】
- codeforces-758【B、C思维】
- Codeforces 417C Football【思维】
- .net 部署在iis
- 2. React JSX语法及特点介绍
- 一些解析
- vim记录功能
- 手把手图文教你从Eclipse项目迁移Android Studio
- Codeforces 141C Queue【思维】
- hdu5478 Can you find it+快速幂
- 留念1
- java(11)------标识符
- TensorFlow实现逻辑回归分类器
- 我也聊聊串口通信协议:用户层通信协议的编制
- 纠正waiting for network configuration网络环境报错问题
- 10月英语总结
- 让TabBar上的图片居中