cf378D(stl模拟)

时间:2022-05-21 17:39:26

题目链接:http://codeforces.com/contest/733/problem/D

用map<pair<int, int>int>标记(第一次用~)...

代码:

 #include <bits/stdc++.h>
#define MAXN 100001
using namespace std; typedef pair<int, int> pair1;
typedef map<pair1, int> map1; struct gg{
int x, y;
int xx, yy;
int xxx, yyy;
}jj[MAXN*]; int main(void){
int n, k=;
map1 mp;
for(int i=; i<MAXN; i++){
jj[i].x=jj[i].y=jj[i].xx=jj[i].yy=jj[i].xxx=jj[i].yyy=;
}
scanf("%d", &n);
for(int i=; i<=n; i++){
int a[], ok1=, ok2=, ok3=;
scanf("%d%d%d", &a[], &a[], &a[]);
sort(a, a+);
if(a[]==a[]){
ok1=;
}
if(a[]==a[]){
ok2=;
}
if(a[]==a[]){
ok3=;
}
int flag1=mp[pair1(a[], a[])];
if(flag1==){
jj[k].x=a[];
jj[k].y=a[];
jj[k].xx=a[];
jj[k].xxx=i;
mp[pair1(a[], a[])]=k;
k++;
}else{
if(jj[flag1].xx>jj[flag1].yy){
swap(jj[flag1].xx, jj[flag1].yy);
swap(jj[flag1].xxx, jj[flag1].yyy);
}
if(jj[flag1].xx<a[]){
jj[flag1].xx=a[];
jj[flag1].xxx=i;
}
}
if(ok1){
continue;
}
if(!ok3){
int flag2=mp[pair1(a[], a[])];
if(flag2==){
jj[k].x=a[];
jj[k].y=a[];
jj[k].xx=a[];
jj[k].xxx=i;
mp[pair1(a[], a[])]=k;
k++;
}else{
if(jj[flag2].xx>jj[flag2].yy){
swap(jj[flag2].xx, jj[flag2].yy);
swap(jj[flag2].xxx, jj[flag2].yyy);
}
if(jj[flag2].xx<a[]){
jj[flag2].xx=a[];
jj[flag2].xxx=i;
}
}
}
if(ok2){
continue;
}
int flag3=mp[pair1(a[], a[])];
if(flag3==){
jj[k].x=a[];
jj[k].y=a[];
jj[k].xx=a[];
jj[k].xxx=i;
mp[pair1(a[], a[])]=k;
k++;
}else{
if(jj[flag3].xx>jj[flag3].yy){
swap(jj[flag3].xx, jj[flag3].yy);
swap(jj[flag3].xxx, jj[flag3].yyy);
}
if(jj[flag3].xx<a[]){
jj[flag3].xx=a[];
jj[flag3].xxx=i;
}
}
}
int cc=, dd=, ee=;
for(int i=; i<k; i++){
int cnt=min(jj[i].x, jj[i].y);
cnt=min(cnt, jj[i].xx+jj[i].yy);
if(cc<cnt){
cc=cnt;
dd=jj[i].xxx;
ee=jj[i].yyy;
}
}
if(dd&&ee){
printf("2\n%d %d\n", dd, ee);
}else{
printf("1\n%d\n", dd+ee);
}
return ;
}