社区讨论
奇怪的错误
P1486[NOI2004] 郁闷的出纳员参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi6h2v04
- 此快照首次捕获于
- 2025/11/20 04:46 4 个月前
- 此快照最后确认于
- 2025/11/20 04:46 4 个月前
这份wa,只有20分
CPP#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
int n,Min,num,now,m,x;
char ch[1];
vector<int> rank;
int main(){
scanf("%d%d",&n,&Min);
while(n--){
scanf("%s%d",ch,&x);
if(ch[0]=='I'){
if(x<Min)
continue;
m++;
x-=now;
rank.insert(lower_bound(rank.begin(),rank.end(),x),x);
}
else
if(ch[0]=='A')
now+=x;
else
if(ch[0]=='S'){
now-=x;
while(num<m&&rank[num]+now<Min)
num++;
}
if(ch[0]=='F'){
if(x<=m-num)
printf("%d\n",rank[m-x]+now);
else
printf("-1\n");
}
}
printf("%d\n",num);
return 0;
}
这就ac了
CPP#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
int n,Min,num,now,m,x;
char ch[1];
vector<int> rank;
vector<int>::iterator it;
int main(){
scanf("%d%d",&n,&Min);
while(n--){
scanf("%s%d",ch,&x);
if(ch[0]=='I'){
if(x<Min)
continue;
m++;
x-=now;
rank.insert(lower_bound(rank.begin(),rank.end(),x),x);
}
else
if(ch[0]=='A')
now+=x;
else
if(ch[0]=='S'){
now-=x;
if(rank.empty())
continue;
it=lower_bound(rank.begin(),rank.end(),Min-now);
if(it==rank.begin())
continue;
if(it==rank.end()){
num+=m;
m=0;
rank.clear();
}
else{
num+=it-rank.begin();
m-=it-rank.begin();
rank.erase(rank.begin(),it);
}
}
else
if(ch[0]=='F'){
if(x<=m)
printf("%d\n",rank[m-x]+now);
else
printf("-1\n");
}
}
printf("%d\n",num);
return 0;
}
可这个真的有区别吗?感觉stl好玄
回复
共 1 条回复,欢迎继续交流。
正在加载回复...