NC219786. L2-1博弈
描述
输入描述
第一行输入 n(1<=n<=100000) 个正整数表示参与对局的人数
之后的 n 行,第 i 行输入三个正整数 P(i,1) ,P(i,2) ,P(i,3) 表示第i个人摸到的三张牌
输出描述
输出 n 行,每行输出一个正整数,第 i 行表示手中的牌第 i 大的人的编号,如果牌相同那么先输出编号小的
示例1
输入:
10 1 1 1 7 8 9 1 2 3 3 3 1 2 2 3 2 2 1 1 2 5 1 3 4 1 2 4 1 2 4
输出:
1 2 3 4 5 6 7 8 9 10
C++(clang++11) 解法, 执行用时: 237ms, 内存消耗: 3528K, 提交时间: 2021-03-21 19:58:47
#include<bits/stdc++.h> using namespace std; #define ll long long const int N=1e5+5; typedef struct { int value; int idex; }Peo; bool cmp(Peo a,Peo b) { if(a.value!=b.value) { return a.value>b.value; } else { return a.idex<b.idex; } } int main() { int n; int a[N][3]; Peo peo[N]; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i][0]>>a[i][1]>>a[i][2]; sort(a[i],a[i]+3); } for(int i=1;i<=n;i++) { peo[i].idex=i; if((a[i][0]==a[i][1])&&(a[i][1]==a[i][2])) { peo[i].value=a[i][0]*3*100000; } else if((a[i][0]+1==a[i][1])&&(a[i][1]+1==a[i][2])) { peo[i].value=a[i][1]*3*10000; } else if((a[i][0]==a[i][1])||(a[i][1]==a[i][2])) { if(a[i][0]==a[i][1]) { peo[i].value=a[i][0]*2*1000+a[i][2]*100; } else if(a[i][1]==a[i][2]) { peo[i].value=a[i][1]*2*1000+a[i][0]*100; } } else { peo[i].value=a[i][0]+a[i][1]*10+a[i][2]*100; } } sort(peo+1,peo+n+1,cmp); for(int i=1;i<=n;i++) { cout<<peo[i].idex<<endl; } return 0; }