QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#644928#6425. Harmonious Rectanglerush-from-behind#AC ✓218ms3656kbC++171.9kb2024-10-16 16:03:552024-10-16 16:03:55

Judging History

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

  • [2024-10-16 16:03:55]
  • 评测
  • 测评结果:AC
  • 用时:218ms
  • 内存:3656kb
  • [2024-10-16 16:03:55]
  • 提交

answer

#include <bits/stdc++.h>
#define F(i,x,y) for(int i=(x);i<=(y);i++)
#define DF(i,x,y) for(int i=(x);i>=(y);i--)
#define ms(x,y) memset(x,y,sizeof(x))
#define SZ(x) (int)x.size()-1
#define all(x) x.begin(),x.end()
#define pb push_back
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int,int> pii;
template<typename T> void chkmax(T &x,T y){ x=max(x,y);}
template<typename T> void chkmin(T &x,T y){ x=min(x,y);}
template<typename T> void read(T &FF){
    FF=0;int RR=1;char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
    for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
    FF*=RR;
}
int n,m,ans,a[10][10];
void dfs(int x,int y){
    if(x>n){
        ans++;
        return;
    }
    F(i,1,3){
        a[x][y]=i;
        bool fl=1;
        F(p,1,x-1){
            F(q,1,y-1){
                if((a[p][q]==a[p][y]&&a[x][q]==a[x][y])||
                (a[p][q]==a[x][q]&&a[p][y]==a[x][y]))
                fl=0;
            }
            if(!fl) break;
        }
        if(fl){
            if(y==m) dfs(x+1,1);
            else dfs(x,y+1);
        }
    }
}
const int P=1e9+7;
int qmi(int x,int y){
    int res=1;for(;y;y>>=1){ if(y&1) res=1ll*res*x%P;x=1ll*x*x%P;}
    return res;
}
int val[10][10];
int main(){
    for(n=2;n<=7;n++) for(m=n;m<=7;m++){
        if(n==2||n==3) ans=0,dfs(1,1),val[n][m]=ans;
        else if(n==4){
            if(m>6) val[n][m]=0;
            else ans=0,dfs(1,1),val[n][m]=ans;
        }
        else if(n==5){
            if(m>5) val[n][m]=0;
            else ans=0,dfs(1,1),val[n][m]=ans;
        }
    }
    int _;cin>>_;
    while(_--){
        cin>>n>>m;
        ans=0;
        if(n>m)swap(n,m);
        int tot=qmi(3,n*m);
        if(n==1) cout<<0<<'\n';
        else if(m>7) cout<<tot<<'\n';
        else cout<<(tot-val[n][m]+P)%P<<'\n';
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 212ms
memory: 3624kb

input:

3
1 4
2 2
3 3

output:

0
15
16485

result:

ok 3 number(s): "0 15 16485"

Test #2:

score: 0
Accepted
time: 218ms
memory: 3540kb

input:

10000
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
1 21
1 22
1 23
1 24
1 25
1 26
1 27
1 28
1 29
1 30
1 31
1 32
1 33
1 34
1 35
1 36
1 37
1 38
1 39
1 40
1 41
1 42
1 43
1 44
1 45
1 46
1 47
1 48
1 49
1 50
1 51
1 52
1 53
1 54
1 55
1 56
1 57
1 58
1 59
1 60
1 6...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
15
339
4761
52929
517761
4767849
43046721
387420489
486784380
381059392
429534507
865810542
792294...

result:

ok 10000 numbers

Test #3:

score: 0
Accepted
time: 215ms
memory: 3656kb

input:

10000
1705 810
454 699
1749 1057
1177 326
132 74
1657 1927
1688 781
1870 1278
261 681
901 1166
740 1088
1762 344
1519 1027
887 1049
1871 1800
533 173
873 1725
1960 1555
1582 628
1197 453
1668 810
1882 468
1163 1011
1077 627
438 113
1150 480
927 407
1393 1348
784 1650
198 903
939 1930
173 1726
1276 1...

output:

4664542
474135175
453284040
865070735
892936842
930878193
929505944
730204219
878002827
776271982
319486673
354630833
31019262
653603083
316945266
163467758
910052980
502234498
692029941
37337160
838442854
94243481
112835966
363282856
563398619
682187998
379850832
751053515
449670075
419120473
96439...

result:

ok 10000 numbers

Test #4:

score: 0
Accepted
time: 217ms
memory: 3536kb

input:

10000
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 7
3 ...

output:

460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
460338013
...

result:

ok 10000 numbers