当前位置: 首页 > news >正文

牛客D题连线

牛客周赛 57 D题,不知道为什么错了。。。

 while(a.size()){cout<<a.back()<<' ';a.pop_back();cout<<a.back()<<' '<<'N'<<endl;}
//我最开始是这样写的,过样例的时候,多了一行 
//1 0 N 
//问题1: 你的循环条件是while(a.size()),这意味着只要容器a不为空,循环就会继续。但是,当你调用pop_back()删除最后一个元素后,容器的大小会减少,但循环条件a.size()仍然为真,因为此时a仍然至少包含一个元素。这会导致循环在删除最后一个元素后仍然尝试访问并打印a.back(),但此时a已经为空,因此访问a.back()会引发未定义行为。//问题2: 在循环的最后一次迭代中,你打印了a.back(),然后调用了pop_back(),接着又尝试打印a.back()。由于pop_back()已经删除了最后一个元素,所以第二次尝试打印a.back()时,a已经为空,这同样会导致未定义行为。
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
typedef long long ll;
vector<int >a,b,c;
int main()
{int n,k,d;cin>>n>>k>>d;for(int i=1;i<=2*n;i++){ll x,y;cin>>x>>y;ll y1=k*x+d;if(y1==y)c.push_back(i);else if(y>y1)a.push_back(i);else b.push_back(i);}
//下面这个循环才是重点for(int i=0;i<c.size();i++){if(a.size()<b.size())a.push_back(c[i]);else b.push_back(c[i]);}if(a.size()<b.size())swap(b,a);cout<<b.size()<<endl;while(b.size()){cout<<b.back()<<' '<<a.back()<<' '<<'Y'<<endl;b.pop_back();a.pop_back();}while(a.size()>1)//这样只能过35%的数据{cout<<a.back()<<' ';a.pop_back();cout<<a.back()<<' '<<'N'<<endl;}
//      for(int i=0;i<b.size();i++){
//         cout<<a[i]<<" "<<b[i]<<" "<<"Y"<<endl;
//     }
//     for(int i=b.size();i<a.size();i+=2){
//         cout<<a[i]<<" "<<a[i+1]<<" "<<"N"<<endl;
//     }return 0;
}

改了一下,就AC了;不知道为什么。。。

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
typedef long long ll;
vector<int >a,b,c;
int main()
{int n,k,d;cin>>n>>k>>d;for(int i=1;i<=2*n;i++){ll x,y;cin>>x>>y;ll y1=k*x+d;if(y1==y)c.push_back(i);else if(y>y1)a.push_back(i);else b.push_back(i);}for(int i=0;i<c.size();i++){if(a.size()<b.size())a.push_back(c[i]);else b.push_back(c[i]);}if(a.size()<b.size())swap(b,a);cout<<b.size()<<endl;while(b.size()){cout<<b.back()<<' '<<a.back()<<' '<<'Y'<<endl;b.pop_back();a.pop_back();}while(a.size()){cout<<a.back()<<' ';a.pop_back();cout<<a.back()<<' '<<'N'<<endl;a.pop_back();}
//      for(int i=0;i<b.size();i++){
//         cout<<a[i]<<" "<<b[i]<<" "<<"Y"<<endl;
//     }
//     for(int i=b.size();i<a.size();i+=2){
//         cout<<a[i]<<" "<<a[i+1]<<" "<<"N"<<endl;
//     }return 0;
}

哦哦哦,我想到了,我不POP的话,就会输出两次。。。


http://www.mrgr.cn/news/13083.html

相关文章:

  • 构建一个资源控制面板:模拟 CPU 和内存负载
  • Qt | Qt是C++最好的图形界面开发库(学习路线图)
  • Java 入门指南:Map 接口
  • React——useRef()
  • vivado U_SET
  • 2024年第十五届蓝桥杯图形化省赛真题分享包含答案
  • World of Warcraft [CLASSIC][80][Grandel] Call to Arms: Strand of the Ancients
  • 力扣(坏了的计算机)
  • SSRF实现.SSH未创建写shell和SSRF漏洞之FastCGI利用
  • 排序补充之快排的三路划分法
  • 【算法基础实验】图论-Dijkstra最短路径
  • ZooKeeper的节点上下线感知
  • redis | 认识非关系型数据库Redis的哈希数据类型
  • 基于C#.net技术的电子支付系统设计与实现
  • 正则表达式(Regular Expression)
  • day42|完全背包问题 518. 零钱兑换 II 377. 组合总和 Ⅳ 322. 零钱兑换 279.完全平方数 139.单词拆分 多重背包问题
  • 图像处理 -- 图像清晰度测量方法
  • 加州大学圣地亚哥分校 沉浸式遥操作机器人系统
  • Wails实现桌面番茄钟应用
  • 渲染十万条数据的方法之分批渲染