codeforces 891B
来源:互联网 发布:上证综指月度数据下载 编辑:程序博客网 时间:2024/05/22 13:20
题面
题意
给出一个长度为n且无相同整数的序列,求该序列的一个排列使两序列中任意几个(大于0小于n)位置的数之和不相同.
方法
开始看到n<=22以为用状压,但无论是时间还是空间都很紧张,且n的范围纯属是因为评测时判断正确与否的复杂度为2^n.
正确方法是使除了最小数外,所有数都变成比它在序列中小一点的数,最小数变成最大数.
证明
假设不取最小值,那么和一定要比原来的序列小,因而不取的那一部分之和比原来的序列要大,故可以证明所有情况都不相等.
代码
#include<iostream>#include<cstdio>#include<algorithm>#include<map>using namespace std;int n,num[30],ans[30];map<int,int>id;int main(){ register int i,j; cin>>n; for(i=1;i<=n;++i) { scanf("%d",&num[i]); id[num[i]]=i; } sort(num+1,num+n+1); for(i=2;i<=n;++i) { ans[id[num[i-1]]]=num[i]; } for(i=1;i<=n;++i) { ans[i]?printf("%d ",ans[i]):printf("%d ",num[1]); }}
阅读全文
1 0
- [Codeforces 891B] Gluttony
- codeforces 891B
- Codeforces 891B Gluttony 构造
- codeforces B
- codeforces B
- codeforces B
- codeforces B
- codeforces -891B Gluttony 排列,构造题
- codeforces -891B Gluttony 排列,构造题
- codeforces 891 B. Gluttony(构造)
- codeforces 891B Gluttony (构造+思维)
- CodeForces 626B CodeForces 626B【暴力】
- CodeForces 841B (B) 博弈
- codeforces 134B
- codeforces#98 b
- codeforces 105 div2 B
- Codeforces 166B - Polygons
- codeforces B. Coins
- “存钱问题”遇到的问题
- 一张图理解prototype、proto和constructor的三角关系
- codeforces 853A
- 区间相交问题(贪心)-算法设计与分析
- Ubuntu中使用virtualenv安装tensorflow
- codeforces 891B
- 数制转换
- poj 1064
- 十七:字符串操作
- js读取本地文件
- C++中struct和class的区别
- 代码分支及版本管理规范
- 汽车加油问题(贪心)-算法设计与分析
- SpringMVC_2