记录编号 600175 评测结果 AAWAAWWAWWWWWWWWWWWWA
题目名称 [CF 121E] 幸运数列 最终得分 29
用户昵称 Gravatarhtl 是否通过 未通过
代码语言 C++ 运行时间 21.238 s
提交时间 2025-04-19 14:19:37 内存使用 8.04 MiB
显示代码纯文本
    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    int a[320][320];
    int b[320][10010];
    int c[320];
    int t[30]={
    4,7,
    44,47,74,77,
    444,447,474,477,744,747,774,777,
    4444,4447,4474,4477,4744,4747,4774,4777,7444,7447,7474,7477,7744,7747,7774,7777
    };
    int main()
    {
        freopen("cf121e.in","r",stdin);
        freopen("cf121e.out","w",stdout);
        cin>>n>>m;
        for(int i=0;i<n;i++)
        {
            cin>>a[i/316][i%316];
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<30;j++)
            {
                if(t[j]-a[i/316][i%316]>=0)
                    b[i/316][t[j]-a[i/316][i%316]]++;
            }
        }
        string str;
        int l,r,d;
        while(m--)
        {
            cin>>str;
            cin>>l>>r;
            l--,r--;
            if(str=="add")
            {
                cin>>d;
                
                if(((r)/316-1)-((l)/316+1)<=2)
                {
                for(int i=l;i<=r;i++)
                {
                    for(int j=0;j<30;j++)
                    {
                        if(t[j]-a[i/316][i%316]>=0)
                            b[(i)/316][t[j]-a[i/316][i%316]]--;
                        if(t[j]-a[i/316][i%316]-d>=0)
                            b[(i)/316][t[j]-a[i/316][i%316]-d]++;
                    }
                }
                }
                else
                {
                for(int i=(l)/316+1;i<=(r)/316-1;i++)
                {
                    c[i]+=d;
                }
                
                for(int i=l;i<((l)/316+1)*316;i++)
                {
                    for(int j=0;j<30;j++)
                    {
                        if(t[j]-a[i/316][i%316]>=0)
                            b[(i)/316][t[j]-a[i/316][i%316]]--;
                        if(t[j]-a[i/316][i%316]-d>=0)
                            b[(i)/316][t[j]-a[i/316][i%316]-d]++;
                    }
                }
                for(int i=((r)/316-1)*316+316;i<=r;i++)
                {
                    for(int j=0;j<30;j++)
                    {
                        if(t[j]-a[i/316][i%316]>=0)
                            b[(i)/316][t[j]-a[i/316][i%316]]--;
                        if(t[j]-a[i/316][i%316]-d>=0)
                            b[(i)/316][t[j]-a[i/316][i%316]-d]++;
                    }
                }
                }
                
            }
            else
            if(str=="count")
            {
                int ans=0;
                
                if(((r)/316-1)-((l)/316+1)<=2)
                {
                for(int i=l;i<=r;i++)
                {
                    for(int j=0;j<30;j++)
                    {
                       if(a[i/316][i%316]+c[(i)/316]==t[j])
                       {
                           ans++;
                           break;
                       }
                    }
                }
                }
                else
                {
                for(int i=(l)/316+1;i<=(r)/316-1;i++)
                {
                    ans+=b[i][c[i]];
                }
                for(int i=l;i<((l)/316+1)*316;i++)
                {
                    for(int j=0;j<30;j++)
                    {
                       if(a[i/316][i%316]+c[(i)/316]==t[j])
                       {
                           ans++;
                           break;
                       }
                    }
                }
                for(int i=((r)/316-1)*316+316;i<=r;i++)
                {
                    for(int j=0;j<30;j++)
                    {
                       if(a[i/316][i%316]+c[(i)/316]==t[j])
                       {
                           ans++;
                           break;
                       }
                    }
                }
                }
                cout<<ans<<endl;
            }
        }
        return 0;
    }