QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#29374#2855. Phone NumbersETK100 ✓571ms4352kbC++142.8kb2022-04-17 15:55:212025-03-11 16:59:43

Judging History

This is the latest submission verdict.

  • [2025-03-11 16:59:43]
  • Judged
  • Verdict: 100
  • Time: 571ms
  • Memory: 4352kb
  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-04-17 15:55:21]
  • Submitted

answer

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
#define pii pair<int,int>
#define vi vector<int>
#define fi first
#define se second
#define pb push_back
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define ALL(x) x.begin(),x.end()
#define sz(x) int(x.size())
#define ll long long
using namespace std;
inline ll read(){
    ll x=0,f=1;char ch=getchar();
    while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
    while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
    return x*f;
}
const int N=1e5+5,P = 1e9+7;
int num[2048];
const int A[4] = {
    1<<1|1<<2|1<<4|1<<5,1<<2|1<<3|1<<5|1<<6,
    1<<4|1<<5|1<<7|1<<8,1<<5|1<<6|1<<8|1<<9
};
int sta4(int a,int b,int c,int d){return 1<<a|1<<b|1<<c|1<<d;}
int sta2(int a,int b){return 1<<a|1<<b;}
bool insq(int S,int c,int sq){
    if((S & sq) != S)return 0;
    if(num[S] != c)return 0;
    if(find(A,A+4,sq) == A+4)return 0;
    return 1;
}
bool line(int a,int b){
    if(a != b)return 0;
    if(a % 9 == 0){//是否列相邻
        a /= 9;
        return (a & (a-1)) == 0;
    }
    if(a % 3 == 0){//行相邻
        a /= 3;
        if(a & a-1)return 0;
        if(a == 1<<3 || a == 1<<6)return 0;
        return 1;
    }
    return 0;
}
struct S{
    int a3,a2,a1,a0;
    bool operator < (const S &x)const{
        return a3 < x.a3 || a3 == x.a3 && (a2 < x.a2 || a2 == x.a2 && (a1 < x.a1 || a1 == x.a1 && a0 < x.a0));
    }
};
char s[N];
int n,a[N];
inline int c(char ch){return ch - '0';}
map <S,int> f,g;
void solve(){
    scanf("%s",s+1);
    int n = 0;
    while(s[n+1])n++;
    rep(i,1,n)a[i] = s[i] - '0';
    f.clear();
    f[(S){-1,-1,-1,0}] = 1;
    rep(i,1,n){
        g.clear();
        for(auto &pre : f){
            S o = pre.fi;
            rep(x,1,9){
                S nxt;
                nxt.a3 = o.a2 | 1 << x;
                nxt.a2 = o.a1 | 1 << x;
                nxt.a1 = o.a0 | 1 << x;
                nxt.a0 = -1;
                if(o.a3 != -1 && insq(o.a3 | 1 << x,4,sta4(a[i-3],a[i-2],a[i-1],a[i])))nxt.a0 = 0;
                if(nxt.a2 != -1 && line(nxt.a2,sta2(a[i-1],a[i])))nxt.a0 = 0;
                if(nxt.a1 == (1<<a[i]))nxt.a0 = 0;
                if(nxt.a3 != -1 && (i == n || !insq(nxt.a3,3,sta4(a[i-2],a[i-1],a[i],a[i+1]))))nxt.a3 = -1;
                if(nxt.a2 != -1 && (i >= n-1 || !insq(nxt.a2,2,sta4(a[i-1],a[i],a[i+1],a[i+2]))))nxt.a2 = -1;
                if(nxt.a0 != -1 || nxt.a1 != -1 || nxt.a2 != -1 || nxt.a3 != -1){
                    g[nxt] = (g[nxt] + pre.se) % P;
                }
            }
        }
        f = g;
    }
    ll ans = 0;
    for(auto &i : f)if(i.fi.a0 == 0)ans = (ans + i.se) % P;
    cout << ans << '\n';
}
int main(){
    rep(i,1,2047)num[i] = num[i>>1] + (i&1);
    int T = read();
    while(T--)solve();
    return 0;
}

詳細信息


Pretests


Final Tests

Test #1:

score: 4.7619
Accepted
time: 1ms
memory: 3840kb

input:

5
1478
4455
5968
31313211
123659874

output:

5
2
24
3
255

result:

ok 5 lines

Test #2:

score: 4.7619
Accepted
time: 1ms
memory: 3712kb

input:

1
5689152484578625359683652141745263254158478962534251632585963749647856412524517957586984215581247851

output:

972152931

result:

ok single line: '972152931'

Test #3:

score: 4.7619
Accepted
time: 1ms
memory: 3840kb

input:

1
5632457812563254176895625326926357123526235625784965815246985475849652371536295688574785693152469589

output:

938269333

result:

ok single line: '938269333'

Test #4:

score: 4.7619
Accepted
time: 1ms
memory: 3840kb

input:

1
7366565897458963524563258478595681542364652847587698562145851352635236517845214581542458714721865325

output:

201642487

result:

ok single line: '201642487'

Test #5:

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

input:

1
5236958653215326425168596251474687896352653296858596754887774854651422536485695232652638987418236585474563526598215453622921453524154962387213256984574875375484786959865457856598657412548755658745784985745912678124586915421544652352147584578452547851245895623547825412458547154258798754413256458742...

output:

916143108

result:

ok single line: '916143108'

Test #6:

score: 4.7619
Accepted
time: 3ms
memory: 3840kb

input:

1
3256528529895689542515668598475854213256125487325642513265213562568972536784548578426539586635236542164215322856326523641525847632598614564758742157484512857512412514574875632784531245856236254356245986895689478523459865323694756252164578824514424156386958742542165239889253625489563562967862358786...

output:

533086196

result:

ok single line: '533086196'

Test #7:

score: 4.7619
Accepted
time: 6ms
memory: 3840kb

input:

1
2356235623562356235623562356235623562356235623562356235623562356235623562356233154215421542154215421542154215421542154215421542154215421542154215421542154215421542154215421542154652365236585748574857485748574857485748574857485748574857485748574857485748574857485748574857485748574857485748574857485...

output:

184251256

result:

ok single line: '184251256'

Test #8:

score: 4.7619
Accepted
time: 29ms
memory: 3712kb

input:

1
2365662356796882362574578658545879652345148755968687415215478124512885742365865952365981298574521659562398562353263832478547865978453257652367485782653458974521456987987452632512456143254145875623425195865326584785986854768915249263542147856941612536441536289562316542151962536315242514362525835784...

output:

834451116

result:

ok single line: '834451116'

Test #9:

score: 4.7619
Accepted
time: 29ms
memory: 3968kb

input:

1
6985749568596547898968574578358368754578356295685241432651422541263589615249145865325835264512547658998475265379647858474589478475845632874592541298651524695845652547826534875478823657851785454785796586914632578124574652345874736184756356899856412569869568769585961524859584721222658747412356758432...

output:

733198963

result:

ok single line: '733198963'

Test #10:

score: 4.7619
Accepted
time: 58ms
memory: 3968kb

input:

1
8548754875487563526352635263526352635263526352635263526352635263526352635247888457845784578457845784578457845784578457845784578457845784856985698569856985698569856985692159865986598659865986598659865986598659865986598659821498569856985698569856985698569856985698569856985765896589658965896589658965...

output:

114987343

result:

ok single line: '114987343'

Test #11:

score: 4.7619
Accepted
time: 291ms
memory: 4352kb

input:

1
4521369857474581865963251879875478458563524598689658623541256245125236574236589652154216895235869235124754875986588251456983256374585578478685945876523625921587498654487581425964769625655893562472536279685412514896545215638352684572385963478574452634421537584658954567548326589615245865945596958616...

output:

569583013

result:

ok single line: '569583013'

Test #12:

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

input:

10
15823565
45362152
15758472
65245788
87584541
78454439
36527845
32598698
41252659
41684575

output:

52
60
42
72
86
26
576
106
54
48

result:

ok 10 lines

Test #13:

score: 4.7619
Accepted
time: 292ms
memory: 4352kb

input:

1
5784575477823241589251425689523674152584128965912784574581254253653287541287785421523514255986745821171288659586935263475842154124152356285748541257841255487215459869265356954526958632145528751246895781659894598645125419874536274585236895214512471528596548765612454625326487549568553625145787488569...

output:

520298668

result:

ok single line: '520298668'

Test #14:

score: 4.7619
Accepted
time: 571ms
memory: 4224kb

input:

1
6652365236523652365236523626325632563256325632563256325632563256325636917499958695869586958695869586958695869586958695869586958695863256325632563256325632563256325632563256325632563256325632563256325632563256325632563256325632563255412541254125412541254125412541298569856985698569856985698569856985...

output:

940331227

result:

ok single line: '940331227'

Test #15:

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

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: 99ms
memory: 4096kb

input:

1
2211333133211122313223132213112231211222221132113311111231323123132311222112322232221122123231313323111313123221322212322213331313212121313323211232332212322313333112312111223212113323311231123131213221313221221113233313233133123323312323221131213132132213133121123213311222211212311313122221211321...

output:

82299876

result:

ok single line: '82299876'

Test #17:

score: 4.7619
Accepted
time: 98ms
memory: 4352kb

input:

1
2321322112321131132132121322323222222122321332313131112312321332333321213233132112213231122123133212312123133332133331222333111323321223121231132313311333223133122333332123331332321232121233322323312233233121223311112221221111212231312131211332113222113223122333122113111331133231232223233213322331...

output:

497823104

result:

ok single line: '497823104'

Test #18:

score: 4.7619
Accepted
time: 116ms
memory: 4352kb

input:

1
9632498212241749941489839189269743221216342632367493649143671626418787483678926947278792496247214983923223896894694699987874416728994778938714239638983693297146337714232682323844896362197912892363869218689211289276783161646912361231238498781692119963281472967832378421323968417227422149398296932121...

output:

109660966

result:

ok single line: '109660966'

Test #19:

score: 4.7619
Accepted
time: 117ms
memory: 4352kb

input:

1
2121273223647696914414786691247434838489899122899463321247246416183936189698824712472132986368798712327868963749932926143278333986912696484723696871217847788932863347411969632984636669861489636696662113468969232899837614163621891439749744783329869129476787847268368764132374139664198796313288212432...

output:

40100194

result:

ok single line: '40100194'

Test #20:

score: 4.7619
Accepted
time: 367ms
memory: 4352kb

input:

1
5598585586569568598658986956996589695869958586959869895685965856958698598658568956869588965695868586958656989596865998656598658968598696858969856956558698655859688969995869958695689556658958965569586896985659685899988569865598659885659866958956899859895685689565885698965986986565988596698589965856...

output:

602457661

result:

ok single line: '602457661'

Test #21:

score: 4.7619
Accepted
time: 488ms
memory: 4096kb

input:

1
5698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856985698569856...

output:

759378925

result:

ok single line: '759378925'