提交记录 21547


用户 题目 状态 得分 用时 内存 语言 代码长度
lmf_up test. 自定义测试 Accepted 100 13.127 ms 9996 KB C++17 2.57 KB
提交时间 评测时间
2024-04-12 17:08:37 2024-04-12 17:08:39
#include<bits/stdc++.h>
std::mt19937 rnd(time(0));
const int maxn=3e5;
char ss1[maxn],ss2[maxn];
int qx[maxn],qy[maxn],qlen[maxn];
unsigned anss[maxn];

void solve(int n, int q, char *s1, char *s2, int *q_x, int *q_y, int *q_len, unsigned *ans)
{
    if (n <= 1e3)
        for (int i = 0; i < q; i++)
        {
            int x = q_x[i], y = q_y[i], len = q_len[i];
            ans[i] = 0;
            for (int t = 0; t < len; t++, x++, y++)
                ans[i] += ((s1[x] == '0' && s2[y] == '1') || (s1[x] == '1' && s2[y] == '2') ||
                           (s1[x] == '2' && s2[y] == '0')) ? 1 : 0;
        }
    else
    {
        for (int i = 0; i < q; i++)
            ans[i] = 0;
        int m = n - 64;
        std::vector<std::bitset<64>> na(m), nb(m);
        std::bitset<64> base;
        std::function<void(char , char)>solve1=[&](char ch1,char ch2)
        {
            for (int i = 0; i < 64; i++)
                base[i] = s1[i] == ch1;
            na[0] = base;
            for (int i = 1; i < m; i++)
            {
                base >>= 1;
                base[63] = s1[i + 63] == ch1;
                na[i] = base;
            }
            for (int i = 0; i < 64; i++)
                base[i] = s2[i] == ch2;
            nb[0] = base;
            for (int i = 1; i < m; i++)
            {
                base >>= 1;
                base[63] = s2[i + 63] == ch2;
                nb[i] = base;
            }
            for (int i = 0; i < q; i++)
            {
                int x = q_x[i], y = q_y[i], len = q_len[i];
                if(len<=8960)
                {

                    if (len <= 63)
                    {
                        for (int j = 0; j < len; j++,x++,y++)
                            ans[i]+=(s1[x]==ch1&&s2[y]==ch2);
                    }
                    else
                    {
                        while(len>63)
                        {
                            auto temp=na[x]&nb[y];
                            x+=64,y+=64;
                            len-=64;
                            ans[i]+=temp.count();
                        }
                        for (int j = 0; j < len; j++,x++,y++)
                            ans[i]+=(s1[x]==ch1&&s2[y]==ch2);
                    }
                }
            }
        };
        solve1('0','1');
        solve1('1','2');
        solve1('2','0');
    }
}

int main()
{
    int n=3e5;
    for(int i=0;i<n;i++)
        ss1[i]=rnd()%3+'0';
    for(int i=0;i<n;i++)
        ss2[i]=rnd()%3+'0';
    for(int i=0;i<n;i++)
        qx[i]=1,qy[i]=1,qlen[i]=n-1;
    solve(n,n,ss1,ss2,qx,qy,qlen,anss);
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #113.127 ms9 MB + 780 KBAcceptedScore: 100


Judge Duck Online | 评测鸭在线
Server Time: 2024-05-07 21:56:11 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用