大佬看看这个代码哪有问题
  • 板块学术版
  • 楼主ahahahee
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/3/18 22:41
  • 上次更新2023/10/23 21:11:06
查看原帖
大佬看看这个代码哪有问题
479683
ahahahee楼主2023/3/18 22:41

题目是这样的:

题目描述

有一天,小L路过一个摊铺。 老板拿着一本书,说:“年轻人,我看你骨骼清奇,如果你能回答我多年的一个疑问,这本书就送你了。”小L虽疑心他是个骗子,但还是回答了他的问题。 问题是这样的:有一个袋子和一些球,每个球上有一个数,老板准备往袋子里扔球或者拿球,还要求摘要和,操作可以这样表示:

1、把一个标着数字 x的球扔进袋子 (add x)

2、把一个标着数字 x的球从袋子里拿出(del x)

3、求袋子中球的摘要和(sum)

袋子中球的摘要和的定义:假设袋子中的球按照标着的数从小到大排序后标着的数是 a1,a2,...,ak,摘要和 =所有ai的和(i≡3(mod5))。

输入

第一行,是一个整数 N,表示操作的数量。后续的 N 行,每行是 “add x”、“del x”、“sum” 中的一种,参见样例。你可以假设,对于 “add x”,标着x的球不在当前集合中,对于 “del x”,标着x的球一定在当前集合中。

输出

对于每一个 sum 操作,输出一行,一个整数,表示摘要和。如果袋子里没有球,输出 0。

样例输入 Copy

9
add 1
add 2
add 3
add 4
add 5
sum
add 6
del 3
sum

样例输出 Copy

3
4

提示 1<=N<=105,1<=x<=109

下面是错误代码:

#include<iostream>
#include<cstdio>
#include<map>
#include<queue>
#define MAXN 100005
using namespace std;
int n,k,i,j;
int q[MAXN];
map<int,int> b;
int main(){
    //freopen("caozuodaizi.in","r",stdin);
    //freopen("caozuodaizi.out","w",stdout);
    cin>>n;
    for(i=1;i<=n;i++){
        string s;
        int a;
        cin>>s;
        if(s=="add"){
            cin>>a;
            b[a]=++k;
            q[k]=a;
        }else if(s=="del"){
            cin>>a;
            int pos=b[a];
            for(j=pos;j<k;j++){
                b[q[j]]=b[q[j+1]]-1;
                q[j]=q[j+1];
            }
            k--;
        }else{
            long long ans=0;
            for(j=3;j<=k;j+=5)
                ans+=q[j];
            cout<<ans<<"\n";
        }
    }
    return 0;
}

求正解或找错

2023/3/18 22:41
加载中...