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 ...
随机推荐
- Squirrel语言初探(可以使用VC6或者MinGW编译)
Squirrel语言初探 为啥我要关注Squirrel语言?原来Squirrel就很像我希望设计出的理想中的语言(当然也不完全符合).比如我觉得Lua的语法表述不清晰,累赘,于是想用C系语法来代替Lu ...
- Qt 模拟鼠标点击(QApplication::sendEvent(ui->pushbutton, &event0);)
QPoint pos(0,0);QMouseEvent event0(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt ...
- 多口USB HUB信号延长器 USBX-M200(针对于A客户使用时很棒吧)
大家都知道A客户是不允许在设备里面出现无线的东东,但是USB的传输距离有很短.咋办呢?? 见下图 http://rextron-cn.com/product_show.asp?id=74
- 文字和图片居中的HTML代码怎么写?
HTML 代码 ,怎么将文本/ 图片居中?这是在W3Cschool的编程问答中前端♌蕾儿提出的问题.网友施主同西否给出了详细的解答. html文字居中和html图片居中方法代码,通过在html中实现文 ...
- VS2010/MFC编程入门之二十(常用控件:静态文本框)
上一节鸡啄米讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始鸡啄米将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组 ...
- 2017 Benelux Algorithm Programming Contest (BAPC 17) Solution
A - Amsterdam Distance 题意:极坐标系,给出两个点,求最短距离 思路:只有两种方式,取min 第一种,先走到0点,再走到终点 第二种,走到同一半径,再走过去 #include ...
- springcloud16---zuul-filter
package com.itmuch.cloud; import org.springframework.boot.SpringApplication; import org.springframew ...
- TED #06# Questioning the universe
Stephen Hawking: Questioning the universe 1. 第一段: There is nothing bigger or older than the universe ...
- git使用合集
1.git 克隆时重命名本地文件夹或目录 如:git clone https://github.com/torvalds/linux.git linux_kernel 2.git查看tag git t ...
- Object.defineProperty和Object.defineProperties
添加属性到对象,或修改现有属性的特性 用法: Object.defineProperty(object, propertyName, descriptor); 参数: object ...