101097B-思维,vector的resize和assign

来源:互联网 发布:js 数组增加键 编辑:程序博客网 时间:2024/05/21 06:25

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;}
0 0