ural 1218. Episode N-th: The Jedi Tournament
2015-10-19 21:14
585 查看
1218. Episode N-th: The Jedi Tournament
Time limit: 1.0 secondMemory limit: 64 MB
Decided several Jedi Knights to organize a tournament once. To know, accumulates who the largest amount of Force. Brought each Jedi his lightsaber with him to the tournament. Are different the lightsaber, and Jedi different are. Three parameters there are: length of the saber, Force of the Jedi and how good the Light side of the Force the Jedi can use. If in at least two parameters one Jedi than the other one stronger is, wins he. Is not possible a draw, because no Jedi any equal parameter may have. If looses a Jedi, must leave the tournament he.
To determine, which Jedi the tournament can win, your program is. Can win the tournament a Jedi, if at least one schedule for the tournament possible is, when the last one remains he on the tournament, not looses any match. For example, if Anakin stronger than Luke by some two parameters is, and Luke stronger than Yoda by some two parameters is, and Yoda stronger than Anakin, exists in this case a schedule for every Jedi to win the tournament.
Input
In the first line there is a positive integer N ≤ 200, the total number of Jedi. After that followN lines, each line containing the name of the Jedi and three parameters (length of the lightsaber, Force, Light side in this order) separated with a space. The parameters are different integers, not greater than 100000 by the absolute value. All names are sequences of not more than 30 small and capital letters.Output
Your program is to output the names of those Jedi, which have a possibility to win the tournament. Each name of the possible winner should be written in a separate line. The order of the names in the output should correspond to the order of their appearance in the input data.Sample
input | output |
---|---|
5 Solo 0 0 0 Anakin 20 18 30 Luke 40 12 25 Kenobi 15 3 2 Yoda 35 9 125 | Anakin Luke Yoda |
Problem Source: The Seventh Ural State University collegiate programming contest
Tags: graph theory (hide tags for unsolved problems)
Difficulty: 338
题意:给出n个人,每个人有三个属性,一个人A比另一个人B优当且仅当A有至少两种属性不小于B的这两种属性,不存在两个人平局。问谁可能笑到最后?
注意,A优于B,B优于C,但C也可能优于A,此时A、B、C都可能笑到最后。
分析:就是说给出n个点,让你建出很多有向边I,j代表i优于j,最后问有多少点能访问全部点
floyd就好
#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <deque> #include <vector> #include <queue> #include <iostream> #include <algorithm> #include <map> #include <set> #include <ctime> using namespace std; typedef long long LL; typedef double DB; #define For(i, s, t) for(int i = (s); i <= (t); i++) #define Ford(i, s, t) for(int i = (s); i >= (t); i--) #define Rep(i, t) for(int i = (0); i < (t); i++) #define Repn(i, t) for(int i = ((t)-1); i >= (0); i--) #define rep(i, x, t) for(int i = (x); i < (t); i++) #define MIT (2147483647) #define INF (1000000001) #define MLL (1000000000000000001LL) #define sz(x) ((int) (x).size()) #define clr(x, y) memset(x, y, sizeof(x)) #define puf push_front #define pub push_back #define pof pop_front #define pob pop_back #define ft first #define sd second #define mk make_pair inline void SetIO(string Name) { string Input = Name+".in", Output = Name+".out"; freopen(Input.c_str(), "r", stdin), freopen(Output.c_str(), "w", stdout); } inline int Getint() { int Ret = 0; char Ch = ' '; while(!(Ch >= '0' && Ch <= '9')) Ch = getchar(); while(Ch >= '0' && Ch <= '9') { Ret = Ret*10+Ch-'0'; Ch = getchar(); } return Ret; } const int N = 210; struct JediType { string Name; int a, b, c; inline void Read() { cin>>Name; scanf("%d%d%d", &a, &b, &c); } inline bool operator >(const JediType &T) const { return ((a >= T.a)+(b >= T.b)+(c >= T.c)) >= 2; } } Jedi ; int n; bool F ; inline void Input() { scanf("%d", &n); For(i, 1, n) Jedi[i].Read(); } inline void Solve() { For(i, 1, n) For(j, 1, n) if(Jedi[i] > Jedi[j]) F[i][j] = 1; For(k, 1, n) For(i, 1, n) For(j, 1, n) F[i][j] |= F[i][k]&F[k][j]; For(i, 1, n) { bool Flag = 1; For(j, 1, n) if(!F[i][j]) { Flag = 0; break; } if(Flag) cout<<Jedi[i].Name<<endl; } } int main() { #ifndef ONLINE_JUDGE SetIO("C"); #endif Input(); Solve(); return 0; }
View Code
相关文章推荐
- apk签名验证机制
- 学生宿舍管理系统--需求说明、概要设计、详细设计
- BestCoder Round #60/HDU 5505 暴力数学
- 黑马程序员 Java基础——泛型
- 项目39.1-2 输出1000以内的所有完数
- 面包屑之java并发
- 简单实现两个activity相互跳转
- 开发手机端API总结
- OpenGL3.3教程-----Shaders Are Coming
- Copy List with Random Pointer
- 5-7 12-24小时制
- 文件句柄、文件描述符与进程和多线程的那些事
- 去除UC浏览器点击的默认样式
- 形上之学
- 数据结构基础 0.前言
- eclipse安装android sdk后工具栏没有显示图标
- android内核剖析 创建窗口过程读书笔记
- Android蓝牙 打开 关闭 与 搜索
- POJ1511 Invitation Cards
- Java事务的相关概念