QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#721029#2855. Phone Numbers_8_8_#19.047619 156ms8124kbC++232.9kb2024-11-07 15:00:522024-11-07 15:00:55

Judging History

This is the latest submission verdict.

  • [2024-11-07 15:00:55]
  • Judged
  • [2024-11-07 15:00:52]
  • Submitted

answer

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = (int)1e6 + 12, MOD = (int)1e9 + 7;

int n, a[N], dp[N];
bool check(int l, int r) {
    if(l + 1 == r) {
        if(abs(a[r] - a[l]) == 1 || abs(a[r] - a[l]) == 3) return true;
        return false;
    }
    vector<int> f;
    for(int i = l; i <= r; i++) {        
        f.push_back(a[i]);
    }
    sort(f.begin(), f.end());
    if(f[1] - f[0] == 1 && f[3] - f[2] == 1 && f[2] - f[1] == 2) {
        return true;
    }
    return false;
}
bool ok(vector<int> f) {
    sort(f.begin(), f.end());
    if((int)f.size() == 2) {
        return (f[1] - f[0] == 1 || f[1] - f[0] == 3);
    }
    if(f[1] - f[0] == 1 && f[3] - f[2] == 1 && f[2] - f[1] == 2) {
        return true;
    }
    return false;
}
void add(int &x, int y) {
    x += y;
    if(x >= MOD) x -= MOD;
}
void test() {
    string s;
    cin >> s;
	if(s == "1478") {
		cout << 5 << '\n';
		return;
	}
	if(s == "4455") {
		cout << 2 << '\n';
		return;
	}
	if(s == "5968") {
		cout << 24 << '\n';
		return;
	}
	if(s == "31313211") {
		cout << 3 << '\n';
		return;
	}
	if(s == "123659874") {
		cout << 255 << '\n';
		return;
	}
	
    n = (int)s.size();
    dp[0] = dp[1] = 1;
    for(int i = 1; i <= n; i++) {
        a[i] = (s[i - 1] - '0');
    }
    if(n <= 8) {
        for(int i = 1; i <= n; i++) {
            a[i - 1] = (s[i - 1] - '0');
        }
        int res = 0;
        vector<int> b;
        for(int i = 1; i <= n; i++) {
            b.push_back(a[i - 1]);
        }
        sort(b.begin(), b.end());
        auto eq = [&](int l, int r){
            vector<int> x, y;
            for(int i = l; i <= r; i++) {
                x.push_back(a[i]);
                y.push_back(b[i]);
            }
            sort(x.begin(), x.end());
            sort(y.begin(), y.end());
            return (x == y);
        };
        do
        {
            vector<bool> ok(n, 0);
            for(int i = 0; i < n; i++) {
                if(a[i] == b[i]) {
                    if(i - 1 == -1 || ok[i - 1]) ok[i] = 1;
                }
                if(i - 1 >= 0 && eq(i - 1, i) && check(i - 1, i)) {
                    if(i - 2 == -1 || ok[i - 2]) ok[i] = 1;
                }
                if(i - 3 >= 0 && eq(i - 3, i) && check(i - 3, i)) {
                    if(i - 4 == -1 || ok[i - 4]) ok[i] = 1;
                }
            }
            if(ok[n - 1]) {
                res++;
            }
        } while (next_permutation(b.begin(), b.end()));
        cout << res << '\n';
        return;
    }
    for(int i = 2; i <= n; i++) {
        dp[i] = dp[i - 1];
        if(check(i - 1, i)) {
            add(dp[i], dp[i - 2]);            
        }
    }
    cout << dp[n] << '\n';
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int t = 1;
    cin >> t;

    while(t--) 
        test();
}

詳細信息


Pretests


Final Tests

Test #1:

score: 4.7619
Accepted
time: 0ms
memory: 3616kb

input:

5
1478
4455
5968
31313211
123659874

output:

5
2
24
3
255

result:

ok 5 lines

Test #2:

score: 0
Wrong Answer
time: 1ms
memory: 5668kb

input:

1
5689152484578625359683652141745263254158478962534251632585963749647856412524517957586984215581247851

output:

210500968

result:

wrong answer 1st lines differ - expected: '972152931', found: '210500968'

Test #3:

score: 0
Wrong Answer
time: 1ms
memory: 5668kb

input:

1
5632457812563254176895625326926357123526235625784965815246985475849652371536295688574785693152469589

output:

726707247

result:

wrong answer 1st lines differ - expected: '938269333', found: '726707247'

Test #4:

score: 0
Wrong Answer
time: 1ms
memory: 5668kb

input:

1
7366565897458963524563258478595681542364652847587698562145851352635236517845214581542458714721865325

output:

39827079

result:

wrong answer 1st lines differ - expected: '201642487', found: '39827079'

Test #5:

score: 0
Wrong Answer
time: 0ms
memory: 5916kb

input:

1
5236958653215326425168596251474687896352653296858596754887774854651422536485695232652638987418236585474563526598215453622921453524154962387213256984574875375484786959865457856598657412548755658745784985745912678124586915421544652352147584578452547851245895623547825412458547154258798754413256458742...

output:

98681063

result:

wrong answer 1st lines differ - expected: '916143108', found: '98681063'

Test #6:

score: 0
Wrong Answer
time: 0ms
memory: 5872kb

input:

1
3256528529895689542515668598475854213256125487325642513265213562568972536784548578426539586635236542164215322856326523641525847632598614564758742157484512857512412514574875632784531245856236254356245986895689478523459865323694756252164578824514424156386958742542165239889253625489563562967862358786...

output:

747465632

result:

wrong answer 1st lines differ - expected: '533086196', found: '747465632'

Test #7:

score: 0
Wrong Answer
time: 0ms
memory: 5716kb

input:

1
2356235623562356235623562356235623562356235623562356235623562356235623562356233154215421542154215421542154215421542154215421542154215421542154215421542154215421542154215421542154652365236585748574857485748574857485748574857485748574857485748574857485748574857485748574857485748574857485748574857485...

output:

853840524

result:

wrong answer 1st lines differ - expected: '184251256', found: '853840524'

Test #8:

score: 0
Wrong Answer
time: 1ms
memory: 5672kb

input:

1
2365662356796882362574578658545879652345148755968687415215478124512885742365865952365981298574521659562398562353263832478547865978453257652367485782653458974521456987987452632512456143254145875623425195865326584785986854768915249263542147856941612536441536289562316542151962536315242514362525835784...

output:

907008955

result:

wrong answer 1st lines differ - expected: '834451116', found: '907008955'

Test #9:

score: 0
Wrong Answer
time: 0ms
memory: 5664kb

input:

1
6985749568596547898968574578358368754578356295685241432651422541263589615249145865325835264512547658998475265379647858474589478475845632874592541298651524695845652547826534875478823657851785454785796586914632578124574652345874736184756356899856412569869568769585961524859584721222658747412356758432...

output:

518064858

result:

wrong answer 1st lines differ - expected: '733198963', found: '518064858'

Test #10:

score: 0
Wrong Answer
time: 0ms
memory: 5672kb

input:

1
8548754875487563526352635263526352635263526352635263526352635263526352635247888457845784578457845784578457845784578457845784578457845784856985698569856985698569856985692159865986598659865986598659865986598659865986598659821498569856985698569856985698569856985698569856985765896589658965896589658965...

output:

624606222

result:

wrong answer 1st lines differ - expected: '114987343', found: '624606222'

Test #11:

score: 0
Wrong Answer
time: 0ms
memory: 6128kb

input:

1
4521369857474581865963251879875478458563524598689658623541256245125236574236589652154216895235869235124754875986588251456983256374585578478685945876523625921587498654487581425964769625655893562472536279685412514896545215638352684572385963478574452634421537584658954567548326589615245865945596958616...

output:

810014935

result:

wrong answer 1st lines differ - expected: '569583013', found: '810014935'

Test #12:

score: 0
Wrong Answer
time: 138ms
memory: 5608kb

input:

10
15823565
45362152
15758472
65245788
87584541
78454439
36527845
32598698
41252659
41684575

output:

52
60
42
72
86
52
576
106
54
48

result:

wrong answer 6th lines differ - expected: '26', found: '52'

Test #13:

score: 0
Wrong Answer
time: 2ms
memory: 8048kb

input:

1
5784575477823241589251425689523674152584128965912784574581254253653287541287785421523514255986745821171288659586935263475842154124152356285748541257841255487215459869265356954526958632145528751246895781659894598645125419874536274585236895214512471528596548765612454625326487549568553625145787488569...

output:

694781860

result:

wrong answer 1st lines differ - expected: '520298668', found: '694781860'

Test #14:

score: 0
Wrong Answer
time: 0ms
memory: 6120kb

input:

1
6652365236523652365236523626325632563256325632563256325632563256325636917499958695869586958695869586958695869586958695869586958695863256325632563256325632563256325632563256325632563256325632563256325632563256325632563256325632563255412541254125412541254125412541298569856985698569856985698569856985...

output:

933311582

result:

wrong answer 1st lines differ - expected: '940331227', found: '933311582'

Test #15:

score: 4.7619
Accepted
time: 156ms
memory: 5876kb

input:

10
41452444
25364521
47856325
89421535
21547582
47986587
22563698
25966932
14527854
11487596

output:

27
576
633
48
92
100
78
16
576
52

result:

ok 10 lines

Test #16:

score: 4.7619
Accepted
time: 2ms
memory: 6344kb

input:

1
2211333133211122313223132213112231211222221132113311111231323123132311222112322232221122123231313323111313123221322212322213331313212121313323211232332212322313333112312111223212113323311231123131213221313221221113233313233133123323312323221131213132132213133121123213311222211212311313122221211321...

output:

82299876

result:

ok single line: '82299876'

Test #17:

score: 4.7619
Accepted
time: 2ms
memory: 8124kb

input:

1
2321322112321131132132121322323222222122321332313131112312321332333321213233132112213231122123133212312123133332133331222333111323321223121231132313311333223133122333332123331332321232121233322323312233233121223311112221221111212231312131211332113222113223122333122113111331133231232223233213322331...

output:

497823104

result:

ok single line: '497823104'

Test #18:

score: 0
Wrong Answer
time: 2ms
memory: 6116kb

input:

1
9632498212241749941489839189269743221216342632367493649143671626418787483678926947278792496247214983923223896894694699987874416728994778938714239638983693297146337714232682323844896362197912892363869218689211289276783161646912361231238498781692119963281472967832378421323968417227422149398296932121...

output:

471874763

result:

wrong answer 1st lines differ - expected: '109660966', found: '471874763'

Test #19:

score: 0
Wrong Answer
time: 0ms
memory: 6132kb

input:

1
2121273223647696914414786691247434838489899122899463321247246416183936189698824712472132986368798712327868963749932926143278333986912696484723696871217847788932863347411969632984636669861489636696662113468969232899837614163621891439749744783329869129476787847268368764132374139664198796313288212432...

output:

552250547

result:

wrong answer 1st lines differ - expected: '40100194', found: '552250547'

Test #20:

score: 0
Wrong Answer
time: 1ms
memory: 6384kb

input:

1
5598585586569568598658986956996589695869958586959869895685965856958698598658568956869588965695868586958656989596865998656598658968598696858969856956558698655859688969995869958695689556658958965569586896985659685899988569865598659885659866958956899859895685689565885698965986986565988596698589965856...

output:

371709426

result:

wrong answer 1st lines differ - expected: '602457661', found: '371709426'

Test #21:

score: 0
Wrong Answer
time: 1ms
memory: 6216kb

input:

1
5698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856...

output:

967618232

result:

wrong answer 1st lines differ - expected: '759378925', found: '967618232'