社区讨论

奇怪的错误

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 条回复,欢迎继续交流。

正在加载回复...