101097B-思维,vector的resize和assign

本文分享了一道关于三角形判定的编程题解决方案,重点介绍了如何利用vector进行数据存储和处理,通过排序和比较实现不同颜色棍子组合成三角形的逻辑。同时,对比了resize与assign方法的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}
resize()函数是用来改变vector中的元素个数的,它有两个参数,分别是nm。参数n表示vector的新的元素个数,参数m表示新添加的元素的初始化值,m可以省略。resize()函数有以下几种使用情况: 1. 当n小于当前vector的size时,resize()会将vector的size减小到n,并删除多余的元素。 2. 当n大于当前vector的size且小于vector的容量capacity时,resize()会将vector的size增加到n,并初始化新增的元素为m,如果m省略,则使用默认值。 3. 当n大于vector的容量capacity时,resize()会先增大vector的容量capacity到n,然后将新增的元素初始化为m,如果m省略,则使用默认值。此时,vector的sizecapacity都会发生改变。 resize()函数常用于调整vector的大小添加初始化元素。它可以使用多种方式调用,如clear()、push_back()、emplace_back()、pop_back()、front()、back()、size()、empty()、insert()、assign()、=(赋值为一个普通的数组)、[]、begin()end()。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vector容器中resize()与reserve()的区别及用法](https://blog.youkuaiyun.com/dffffffff1/article/details/124245023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [C++重构vector](https://download.youkuaiyun.com/download/weixin_68756152/87961116)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值