SGU 138. Games of Chess 构造 难度:2
138. Games of Chess
time limit per test: 0.25 sec.
memory limit per test: 4096 KB
N friends gathered in order to play chess, according to the following rules. In the first game, two of the N friends will play. In the second game, the winner of the first game will play against another friend (maybe even the same friend who lost the first game). In the third game, the winner of the second game will play against someone else and so on.. No game will end as a draw (tie). Given the number of games each of the N friends played, find a schedule for the games, so that the above rules are obeyed.
Input
The first line contains the number of friends N (2<=N<=100). The second line contains N integers, separated by blanks, representing the number of games each friend played. The first number represents the number of games played by the first friend, the second number represents the number of games played by the second friend and so on..
Output
The first line should contain the number of games played by all the friends (it will be an integer between 1 and 10 000, for every test case). Let's suppose this number is G. Then, G lines follow, each of them containing two integers, describing the games. The first line contains the numbers of the two friends who played the first game. The friend printed first is considered to be the winner. Each of the next G-1 lines contain the integers a and b, where a<>b and a or b is the winner of the previous game. The friend printed first on the line is considered to be the winner of the game.
It is guaranteed that for every test case there will be at least one possible scheduling of the games.
Sample Input
4
2 4 1 5
Sample Output
6
4 3
4 1
2 4
2 1
4 2
2 4
如果使用回路(1,2, 2,1, 2,3,...),可能会造成1 1 1 1 这种状态,
我们需要填充这样一个表,关键是不要让自己和自己对决即可
A B C D E....(总场次/2)
S:
L:
按场次从大到小排序,然后对于
A B C D E....(总场次/2)
S:
L:
每个人按照赢--(度只剩一个)输--(如果赢的填完了)输来填充,相当于把这条数列从中间截开,然后把后面那条和必要的转移作为输的,前面一条作为赢.
比如题目样例
排序过后是<5,4>,<4,2>,<2,1>,<1,3>
填充4
A,B,C,D,E,F
S:4,4,4,4,
L: 4,
填充2
A,B,C,D,E,F
S:4,4,4,4,2,2,
L:2,2, 4,
填充1
A,B,C,D,E,F
S:4,4,4,4,2,2,
L:2,2,1,1,4,
填充3
A,B,C,D,E,F
S:4,4,4,4,2,2,
L:2,2,1,1,4,3,
这个时候对于拐弯的那个重复数列设为i,设可填的非自身重叠长度l1,可填充自身重叠长度为l2,待填充长度为len,假设l1<len那么就有l1>已被填充的S序列长度,而场数排过序,如果i不是场数最大的人,不可能出现这种情况,如果i是第一个却发生转弯,也就是说没有答案
#include <cstdio>
#include <algorithm>
using namespace std;
typedef pair<int ,int> P;
int n;
P deg[101];
int nowdeg[101];
int heap[10001][2];
bool cmp(P p1,P p2){
return p2.first<p1.first;
}
int main(){
scanf("%d",&n);
int sum=0;
for(int i=0;i<n;i++){
scanf("%d",°[i].first);
sum+=deg[i].first;
deg[i].second=i+1;
}
sort(deg,deg+n,cmp);
int s=sum/2;
printf("%d\n",s);
int ind=0;
bool fl=false;
for(int i=0;i<n;i++){
for(int j=1;j<=deg[i].first;j++){
if(j==deg[i].first&&!fl)heap[ind][1]=deg[i].second;
else if(!fl){
heap[ind++][0]=deg[i].second;
}
else {
while(heap[ind][1]!=0){++ind;}
heap[ind][1]=deg[i].second;
}
if(ind==s){ind=0;fl=true;}
}
}
for(int i=0;i<s;i++)printf("%d %d\n",heap[i][0],heap[i][1]);
return 0;
}
SGU 138. Games of Chess 构造 难度:2的更多相关文章
- SGU 138.Games of Chess
时间限制:0.25s 空间限制:4M 题目: n个朋友在一起按照下面的规则依次下棋:在第一局游戏,n个人中的两个开始下棋.在第二局,第一局胜利的人将跟其他人下棋(也可能还是输了第一局人), 在第三局第 ...
- sgu 137. Funny Strings 线性同余,数论,构造 难度:3
137. Funny Strings time limit per test: 0.25 sec. memory limit per test: 4096 KB Let's consider a st ...
- UVa LA 4094 WonderTeam 构造 难度: 1
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- sgu 147. Black-white king 思路 坑 难度:1
147. Black-white king time limit per test: 0.25 sec.memory limit per test: 4096 KB input: standard i ...
- sgu 138
自己猜测了一下 按比赛次数 从大到小排 然后类似于模拟 先排胜的场次 当只剩一场 将它定义为败 #include <cstdio> #include <cstdlib> # ...
- sgu 121. Bridges painting 列举情况 难度:1
121. Bridges painting time limit per test: 0.25 sec. memory limit per test: 4096 KB New Berland cons ...
- 109. Magic of David Copperfield II 构造 难度:2
109. Magic of David Copperfield II time limit per test: 0.25 sec. memory limit per test: 4096 KB The ...
- sgu 183. Painting the balls 动态规划 难度:3
183. Painting the balls time limit per test: 0.25 sec.memory limit per test: 4096 KB input: standard ...
- POJ 3295 Tautology 构造 难度:1
Tautology Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9580 Accepted: 3640 Descrip ...
随机推荐
- MySQL 的mysqldump备份
MySQL 的mysqldump备份 来自<mysql技术内幕 innodb存储引擎> --single-transaction:只对innodb表有效 --lock-tables:对My ...
- php composer使用过程
1.安装composer curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/compos ...
- Es+kafka搭建日志存储查询系统(设计)
现在使用的比较常用的日志分析系统有Splunk和Elk,Splunk功能齐全,处理能力强,但是是商用项目,而且收费高.Elk则是Splunk项目的一个开源实现,Elk是ElasticSearch(Es ...
- Mist 转移默认区块存储位置方法
http://8btc.com/thread-35325-1-1.html 看了bunaifeiqq 发的帖子“Mist 转移区块存储位置方法”,综合帖子下面的发言,自己做了测试,可行.电脑系统win ...
- 《Java入门第二季》第四章 多态
Java 中的多态1.引用的多态:意思就是父类的句柄既可以持有本类的对象,也可以持有子类的对象. 2.方法的多态:注意点是当父类句柄持有子类对象的时候,无法调用子类特有的方法. 多态中的引用类型转换1 ...
- 如何解决ubuntu报的错误:You must put some 'source' URIs in your sources.list
答:添加deb-src开头的源,如 deb-src http://cn.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
- 利用Minhash和LSH寻找相似的集合(转)
问题背景 给出N个集合,找到相似的集合对,如何实现呢?直观的方法是比较任意两个集合.那么可以十分精确的找到每一对相似的集合,但是时间复杂度是O(n2).当N比较小时,比如K级,此算法可以在接受的时间范 ...
- 路由跟踪tracert
Tracert命令 如果我们要测试某一个IP都经过哪些路由,用trcert命令即可,这是dos下的一个基本网络命令,具体使用方法: 1,在windows系统下,打开 运行 :输入 cmd :在弹出的d ...
- jsapi微信扫一扫
微信公众号开发--微信JS-SDK扫一扫功能 首先请阅读微信JS-SDK说明文档,了解微信JS的相关说明. 根据官方的使用步骤,关键的有以下几步 绑定域名(很关键) 引入JS文件(很简单) 通过con ...
- Java实现GUI计算器【代码】
这几天用java写了一个计算器程序,开始写的时候原本只是想实现一下GUI(这个是直接读三个字母还是什么“固椅”的发音)界面,熟悉一下Java GUI 编程,为Java期末大作业练练手,本以为代码不会很 ...