QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#492668#6128. Flippy SequenceInk_baiAC ✓264ms7260kbC++142.3kb2024-07-26 15:06:072024-07-26 15:06:08

Judging History

你现在查看的是最新测评结果

  • [2024-07-26 15:06:08]
  • 评测
  • 测评结果:AC
  • 用时:264ms
  • 内存:7260kb
  • [2024-07-26 15:06:07]
  • 提交

answer

#include <bits/stdc++.h>

#define int long long

using namespace std;

int combination(int n) {
    if (n < 2) return 0;
    return n * (n - 1) / 2;
}

signed main()
{
    int n;
    cin >> n;
    while(n--)
    {
        int len;
        cin >> len;
        string s1, s2;
        cin >> s1 >> s2;
        if(len == 1)
        {
            if(s1[0] == s2[0]) cout << 1 << endl;
            else cout << 0 << endl;
            continue;
        }
        bool beg = false, en = false;
        int countb = 0;
        int counte = 0;
        bool begin = false;
        bool cut = true;
        vector<int> a, b;
        for(int i = 0; i < len; i++)
        {
            if(s1[i] != s2[i])
            {
                if(cut)
                {
                    countb++;
                    cut = false;
                    a.push_back(i);
                }
            }
            else
            {
                if(!cut)
                {
                    counte++;
                    cut = true;
                    b.push_back(i);
                }
            }
        }
        if(s1[0] != s2[0]) beg = true;
        if(s1[len-1] != s2[len-1])
        {
            en = true;
            b.push_back(len);
        }
        if(countb > 2)
        {
            cout << 0 << endl;
            continue;
        }
        if(countb == 2||counte == 2)
        {
            cout << 6 << endl;
            continue;
        }
        if(countb == counte&&countb == 1&&!beg&&!en)//
        {
            cout << (b[0] - a[0] - 1 + len - (b[0] - a[0])) * 2<< endl;
            continue;
        }
        if(countb == counte&&countb == 1&&beg&&!en)//
        {
            cout << (b[0] - a[0] - 1 + len - b[0]) * 2 << endl;//
            continue;
        }
        if(countb == 1 && counte == 0&&beg&&en)//
        {
            cout << (b[0] - a[0] - 1) * 2 << endl;
            continue;
        }
        if(countb == 1 && counte == 0&&!beg&&en)//
        {
            cout << (b[0] - a[0] - 1 + a[0]) * 2 << endl;
            continue;
        }
        if(countb == counte&&countb == 0)//
        {
            cout << combination(len) + len << endl;
            continue;
        }
    }
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3580kb

input:

3
1
1
0
2
00
11
5
01010
00111

output:

0
2
6

result:

ok 3 number(s): "0 2 6"

Test #2:

score: 0
Accepted
time: 264ms
memory: 7260kb

input:

126648
1
0
0
1
1
0
2
01
01
2
01
11
2
10
11
2
11
00
3
011
011
3
010
110
3
011
001
3
111
001
3
001
000
3
101
000
3
011
000
3
111
000
4
1111
1111
4
1110
0110
4
0010
0110
4
1011
0111
4
1001
1011
4
0100
1110
4
0000
0110
4
0111
1001
4
1001
1000
4
1011
0010
4
0001
0100
4
1000
0101
4
0100
0111
4
1101
0110
4...

output:

1
0
3
2
2
2
6
4
4
4
4
6
4
4
10
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
15
8
8
8
8
6
8
8
8
6
6
6
8
6
8
8
8
6
6
6
6
0
6
6
8
6
6
6
8
6
8
8
21
10
10
10
10
6
10
10
10
6
6
6
10
6
10
10
10
6
6
6
6
0
6
6
10
6
6
6
10
6
10
10
10
6
6
6
6
0
6
6
6
0
0
0
6
0
6
6
10
6
6
6
6
0
6
6
10
6
6
6
10
6
10
10
28
12
12
12
12
6
12
12
1...

result:

ok 126648 numbers