博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sgu 138
阅读量:4709 次
发布时间:2019-06-10

本文共 1341 字,大约阅读时间需要 4 分钟。

自己猜测了一下  按比赛次数 从大到小排  然后类似于模拟 先排胜的场次 当只剩一场 将它定义为败

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define maxn 100010#define INF 0x7fffffff#define inf 10000000#define MOD 1000000007#define ull unsigned long long#define ll long longusing namespace std;struct node{ int id, x; bool operator < (const node& p) const { return x > p.x; }};node pp[110];int win[maxn], lose[maxn];void solve(int sum){ int j = 0; for(int i =0 ; i < sum; ++ i) { while(!pp[j].x) j++; if(pp[j].x > 1) { win[i] = pp[j].id; pp[j].x--; } else if(pp[j].x == 1) { lose[i] = pp[j].id; pp[j].x--; j++; win[i] = pp[j].id; pp[j].x--; } } j = 0; for(int i =0 ; i < sum; ++ i) { if(lose[i]) continue; while(!pp[j].x) j++; if(pp[j].x > 1) { lose[i] = pp[j].id; pp[j].x--; } else if(pp[j].x == 1) { lose[i] = pp[j].id; pp[j].x--; j++; } }}int main(){ int n; while(scanf("%d", &n) == 1) { int sum = 0; for(int i = 0; i < n; ++ i) { scanf("%d", &pp[i].x); pp[i].id = i+1; sum += pp[i].x; } sort(pp, pp+n); memset(win, 0, sizeof(win)); memset(lose, 0, sizeof(lose)); sum /= 2; solve(sum); printf("%d\n", sum); for(int i = 0; i < sum; ++ i) printf("%d %d\n", win[i], lose[i]); } return 0;}

转载于:https://www.cnblogs.com/avema/p/3774187.html

你可能感兴趣的文章
k8s-高级调度方式-二十一
查看>>
[HDU3555]Bomb
查看>>
基于dubbo的分布式系统(一)安装docker
查看>>
Recursion
查看>>
66. Plus One
查看>>
COMP30023 Computer Systems 2019
查看>>
CSS选择器分类
查看>>
Kali学习笔记39:SQL手工注入(1)
查看>>
C# MD5加密
查看>>
Codeforces Round #329 (Div. 2)D LCA+并查集路径压缩
查看>>
移动应用开发测试工具Bugtags集成和使用教程
查看>>
Java GC、新生代、老年代
查看>>
Liferay 6.2 改造系列之十一:默认关闭CDN动态资源
查看>>
多线程
查看>>
折线切割平面
查看>>
获取当前路径下的所有文件路径 :listFiles
查看>>
图像形态学及更通用的形态学的原理及细节汇总
查看>>
linux开启coredump的3种方法
查看>>
数据驱动之 python + requests + Excel
查看>>
小鸡啄米问题求解
查看>>