本文主要是介绍牛客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的话,就会输出两次。。。
这篇关于牛客D题连线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!