101097B-思维,vector的resize和assign
程序员文章站
2022-02-05 19:28:11
...
too young too naive。
开始做过一道判定三角形的水题,直接排序判断就行,但是这个有颜色限制。没有考虑到。。
方法1
假设一个盒子,保证这个盒子里有三种不同颜色的棍子,
如果加的一个棍子中和盒子里有重复的,就把盒子里的替换掉。
如果没有的话,就找辣两个最大的和这个比。
注意:后续的添加及处理都保证0位和1位是俩大的。0最大。
第二个代码和第一个很像。
对于vector的理解。
如果没有定义长度,在一开始就弄3是不对的。resize()可以给vector配置空间。
但是assign更好,因为assign还可以赋初值
。q巨巨现场写过resize,发现初始竟然不是0,并且从大变小是无效的。
所以还是assign好点。
assign(m,n),m是大小,n是初始值。
include
include
include
define P pair
#include <bits/stdc++.h>
/*高中巨佬的代码,
不得不说写的太好了。
*/
#define P pair<int,int>
#define MP(x,y) make_pair(x,y)
using namespace std;
inline void read(int&a){
char c;
while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';
while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';
}
vector<pair<int,int> >q;
int cmp1(P a,P b)
{ return a.first<b.first;
}
int main()
{ freopen("sticks.in","r",stdin);
freopen("sticks.out","w",stdout);
int m;
int k,l;
read(m);
for(int i=1;i<=m;i++)
{ read(k);
for(k;k>=1;k--,q.push_back(MP(l,i)))
read(l);
}
sort(q.begin(),q.end(),cmp1);
P fir=MP(0,0);
P sec=MP(0,0);
P thi=MP(0,0);
for(int i=0;i<q.size();i++)
{ if(q[i].second==fir.second)
{ if(thi.first+sec.first>q[i].first)
{ printf("%d %d %d %d %d %d\n",thi.second,thi.first,sec.second,sec.first,q[i].second,q[i].first);
return 0;
}
fir.first=q[i].first;fir.second=q[i].second;
}
else if(q[i].second==sec.second)
{ if(fir.first+thi.first>q[i].first)
{ printf("%d %d %d %d %d %d\n",fir.second,fir.first,thi.second,thi.first,q[i].second,q[i].first);
return 0;
}
sec=fir;fir=q[i];
}
else
{ if(fir.first+sec.first>q[i].first)
{ printf("%d %d %d %d %d %d\n",fir.second,fir.first,sec.second,sec.first,q[i].second,q[i].first);
return 0;
}
thi=sec;sec=fir;fir=q[i];
}
}
puts("NIE");
return 0;
}
上一篇: matplotlib之添加子图