题解

131 条题解

  • 3
    @ 2018-10-30 20:33:19
    //差点就写了树状数组。。。但其实是有O(n+k)做法的
    //题目中说到,主任位置是单调递增的,我们维护上一次查询的结果,之后可以将每次修改操作分为两种情况:
    //1.将要修改的点在主任前
    //2.将要修改的点在主任后
    //对于第一种情况,我们直接在上一次结果上进行操作
    //对于第二种情况,我们将修改保存在一个数组中,每次主任的位置变动时,从其上一个位置往后扫
    //由于位置单调递增,每个点至多被扫到一次,总复杂度O(n+k)
    //代码也很简洁
    #include<cstdio>
    #include<iostream>
    using namespace std;
    int sum[500010];
    int main()
    {
        char c;
        int n,k,i,j,m,p,now=0,num=0;
        scanf("%d%d",&n,&k);
        for(i=1;i<=k;i++)
        {
            scanf(" %c",&c);
            if(c=='A')
            {
                scanf("%d",&m);
                for(j=now+1;j<=m;j++)
                 num+=sum[j];
                now=m;
                printf("%d\n",num);
            }
            if(c=='B')
            {
                scanf("%d%d",&m,&p);
                sum[m]+=p;
                if(m<=now)
                 num+=p;
            }
            if(c=='C')
            {
                scanf("%d%d",&m,&p);
                if(m<=now)
                 num-=min(p,sum[m]);
                sum[m]=max(0,sum[m]-p);
            }
        }
        return 0;
    }
    
    
  • 1
    @ 2021-03-17 15:04:39
    #include <cmath>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <deque>
    using namespace std;
    
    namespace dts
    {
        int N,K;
        int rec[1<<19];
        #define rec(x) rec[(x)-1]
        
        void main()
        {
            scanf("%d %d\n",&N,&K);
            int pos=0,ans=0;
            memset(rec,0,sizeof(rec));
            for (int i=1;i<=K;i++)
            {
                int M,P;
                char O;
                scanf("%c %d ",&O,&M);
                if (O=='A')
                {
                    for (;pos<M;pos++)
                        ans+=rec(pos+1);
                    printf("%d\n",ans);
                }
                else
                {
                    scanf("%d\n",&P);
                    if (O=='B')
                    {
                        rec(M)+=P;
                        if (pos>=M)
                            ans+=P;
                    }
                    else if (O=='C')
                    {
                        rec(M)-=P;
                        if (pos>=M)
                            ans-=P;
                    }
                }
            }
        }
    };
    
    int main()
    {
        dts::main();
    }
    
  • 0
    @ 2014-03-22 17:01:36

    编译成功

    测试数据 #0: Accepted, time = 31 ms, mem = 2688 KiB, score = 10
    测试数据 #1: Accepted, time = 15 ms, mem = 2688 KiB, score = 10
    测试数据 #2: Accepted, time = 15 ms, mem = 2692 KiB, score = 10
    测试数据 #3: Accepted, time = 124 ms, mem = 2688 KiB, score = 10
    测试数据 #4: Accepted, time = 109 ms, mem = 2692 KiB, score = 10
    测试数据 #5: Accepted, time = 156 ms, mem = 2692 KiB, score = 10
    测试数据 #6: Accepted, time = 124 ms, mem = 2688 KiB, score = 10
    测试数据 #7: Accepted, time = 156 ms, mem = 2692 KiB, score = 10
    测试数据 #8: Accepted, time = 124 ms, mem = 2688 KiB, score = 10
    测试数据 #9: Accepted, time = 140 ms, mem = 2692 KiB, score = 10
    Accepted, time = 994 ms, mem = 2692 KiB, score = 100

  • 0
    @ 2012-10-24 21:11:58

    ├ 测试数据 01:答案正确... (0ms, 2536KB)

    ├ 测试数据 02:答案正确... (0ms, 2536KB)

    ├ 测试数据 03:答案正确... (0ms, 2536KB)

    ├ 测试数据 04:答案正确... (0ms, 2536KB)

    ├ 测试数据 05:答案正确... (0ms, 2536KB)

    ├ 测试数据 06:答案正确... (0ms, 2536KB)

    ├ 测试数据 07:答案正确... (0ms, 2536KB)

    ├ 测试数据 08:答案正确... (0ms, 2536KB)

    ├ 测试数据 09:答案正确... (0ms, 2536KB)

    ├ 测试数据 10:答案正确... (0ms, 2536KB)

    ---|---|---|---|---|---|---|---|-

    Accepted / 100 / 0ms / 2536KB

    去你妹的输出格式!

    write(sum)错了

    writeln(sum)错了

    write(sum,' ')错了

    write(sum,' ')

    ……

    writeln对了!

    害我WA了3次!

    去你妹的输出格式!

  • 0
    @ 2012-10-07 16:11:58

    同志们,不要信题目,不要信样例。楼下有人说最后不加writeln也过,那是对的。

    一开始只write,没过;

    在程序最后加了个writeln,没过;

    改成write(tot,' ');,过了……

    只要在输出时加空格就行了

  • 0
    @ 2010-07-22 18:36:29

    真是Vag 6K才能A啊

    1.write(sum,' ')

    2.最后+writeln

    3.有下车(C)情况

    4.纯模拟

  • 0
    @ 2009-11-07 14:31:45

    各位牢记

    输出全在一行

    最后writeln!!!!!!

    我悲剧了n次

  • 0
    @ 2009-10-27 18:58:53

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 56ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:56ms

  • 0
    @ 2009-10-27 18:31:40

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 72ms

    ├ 测试数据 06:答案正确... 25ms

    ├ 测试数据 07:答案正确... 25ms

    ├ 测试数据 08:答案正确... 87ms

    ├ 测试数据 09:答案正确... 40ms

    ├ 测试数据 10:答案正确... 72ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:321ms

    心破了,呜呜~~~~~~~~

  • 0
    @ 2009-10-11 11:03:16

    交了n次 原来输出时没有空格 郁闷

    另外

    这是 sunny 的

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 72ms

    ├ 测试数据 05:运行超时|格式错误...

    ├ 测试数据 06:运行超时|格式错误...

    ├ 测试数据 07:运行超时|格式错误...

    ├ 测试数据 08:运行超时|格式错误...

    ├ 测试数据 09:运行超时|格式错误...

    ├ 测试数据 10:运行超时|格式错误...

    ---|---|---|---|---|---|---|---|-

    Unaccepted 有效得分:40 有效耗时:72ms

    而 同一个程序

    puppy 却

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    汗……

  • 0
    @ 2009-09-25 21:32:52

    不知道怎么就ac了。

    此题刷掉我两个百分点。

  • 0
    @ 2009-09-21 19:38:29

    为什么我偏偏交了3次。。。

    P.S.

    此题甚是猥琐。。并且甚是海洋。。

  • 0
    @ 2009-09-20 10:46:52

    vj老这样就没意思了,数据输出一直出问题.不过没事,大家都多交一次-_-|||

  • 0
    @ 2009-09-07 16:44:37

    郁闷……

    看到水题太激动了,居然忘了有下车的情况,白白浪费我一次提交……

  • 0
    @ 2009-08-26 13:35:26

    因为M是递增的,所以每次对于A的询问,把前面求和的值保存下来,不必重复计数,可以秒杀。

    • @ 2016-11-03 22:42:53

      +1s
      好气啊!没考虑到M是递增的这其中必有高论,害我写线段树

  • 0
    @ 2009-08-25 14:03:14

    VIJOS的题太坑人……不是输出有问题就是精度很猥琐……害得我的通过率从最初的67%掉到现在的52%……我真的很无语……

    这道题一定要在后面加writeln;!!!

    否则有些人30,有些人50,有些人爆0……

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2009-08-14 16:01:09

    这个输出方法真的好扭曲,换行多好看啊.......

  • 0
    @ 2009-08-12 20:27:04

    我无语了!数据有问题!

    记住write和writeln!

    ---|---|---|---|---|---|---|---|---|-

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2009-08-10 23:45:44
    • -
      一开始重新写,30...
      拿去年过puppy的程序交,50~70...还以为puppy比去年慢了
      看了walala的题解...加了个writeln

    结果...0ms

    我@#$%^&

  • 0
    @ 2009-08-08 09:48:08

    var n,m,x,y,b,c,r,l:longint;

    s:string;

    a:array[1..500000] of longint;

    procedure split;

    var tmp:string;

    begin

    delete(s,1,2);

    if pos(' ',s)0 then

    begin

    tmp:=copy(s,1,pos(' ',s)-1);

    delete(s,1,pos(' ',s));

    end

    else

    begin

    tmp:=copy(s,1,255);

    s:='';

    end;

    val(tmp,x);

    if s'' then val(s,y);

    end;

    begin

    readln(n,m);

    r:=0;

    l:=1;

    fillchar(a,sizeof(a),0);

    for b:=1 to m do

    begin

    readln(s);

    case s[1] of

    'A':

    begin

    split;

    for c:=l to x do

    r:=r+a[c];

    l:=x+1;

    write(r,' ');

    end;

    'B':

    begin

    split;

    if x

信息

ID
1320
难度
6
分类
模拟 点击显示
标签
(无)
递交数
2166
已通过
573
通过率
26%
被复制
6
上传者