题目描述
某地出土了一批古董,每件古董有三个属性,分别是年代,硬度和艺术价值,其中第 𝑖i 件古董的名称为 𝑠𝑖si,年代为 𝑎𝑖ai,硬度为 𝑏𝑖bi,艺术价值为 𝑐𝑖ci。
对于任意两件古董来说,若某个属性的数值相差大于等于100100,则数值较小的那件古董是不可靠的,应标记为赝品,请将赝品排出后,输出剩余古董名单。
输入格式
第一行:单个正整数 𝑛n。
之后 𝑛n 行每行一个字符串 𝑠𝑖si与三个正整数 𝑎𝑖,𝑏𝑖,𝑐𝑖ai,bi,ci别表示一件古董的年代,硬度和艺术价值。
输出格式
如果所有古董都被排除了,输出 There is no winner.
否则,第一行输出 Winning list:
,然后按输入顺序输出所有保留的古董名称,每个单独一行。
输入样例1:
5
A 1 1 1
B 20 20 20
C 40 40 40
D 80 80 80
E 120 120 120
输出样例1:
Winning list:
C
D
E
输入样例2:
3
Ai 1 100 20
Be 101 101 21
Ct 40 80 121
输出样例2:
Winning list:
Ct
输入样例3:
2
Old 1 100 121
Egg 101 101 21
输出样例3:
There is no winner.
数据范围
对于全部的数据 1≤𝑛≤105,1≤∣𝑠𝑖∣≤10,1≤𝑎𝑖,𝑏𝑖,𝑐𝑖≤1091≤n≤105,1≤∣si∣≤10,1≤ai,bi,ci≤109。
代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
string name;
int a,b,c;
};
node gd[100005];
int main()
{
int n;
cin>>n;
int maxa,maxb,maxc;
for(int i=1;i<=n;i++){
string xm;cin>>xm;
int x,y,z;
cin>>x>>y>>z;
gd[i]={xm,x,y,z};
maxa=max(maxa,x);
maxb=max(maxb,y);
maxc=max(maxc,z);
}
int k=0;
for(int i=1;i<=n;i++){
if(maxa-gd[i].a>=100||maxb-gd[i].b>=100||maxc-gd[i].c>=100)continue;
if(k==0){
cout<<"Winning list:"<<endl;
k++;
}
cout<<gd[i].name<<endl;
}
if(k==0){
cout<<"There is no winner.";
}
return 0;
}