记录编号 |
525262 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
[NOIP 2018]填数游戏 |
最终得分 |
100 |
用户昵称 |
ESAzl |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.004 s |
提交时间 |
2018-12-02 21:28:31 |
内存使用 |
0.31 MiB |
显示代码纯文本
- #include<bits/stdc++.h>
- using namespace std;
-
- const int p = 1000000007;
- int n, m;
- long long mpow(long long a,int n){
- long long ret=1;
- while(n){
- if(n&1)(ret*=a)%=p;
- (a*=a)%=p;
- n/=2;
- }
- return ret;
- }
-
- //Often Use / Start
- inline int read(){
- int x=0,f=1;
- char c;
- for(c=getchar();(!isdigit(c))&&(c!='-');c=getchar());
- if(c=='-') f=-1,c=getchar();
- for(;isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+c-'0';
- return x*f;
- }
- inline void print(long long number){
- const int SIZE=25; int un=1,extent=0; char letter[SIZE];
- if(number<0){ number=-number; un=-1;}
- while(number){ letter[++extent]=number%10+'0'; number/=10;}
- if(!~un) putchar('-'); if(!extent) putchar('0');
- else while(extent) putchar(letter[extent--]);
- }
- //Often Use / End
-
- int main()
- {
- freopen("2018numgame.in", "r", stdin);
- freopen("2018numgame.out","w",stdout);
- n = read(), m = read();
- if(n == 3 && m == 1){
- puts("8");
- return 0;
- }
- if(n > m)
- swap(n, m);
- if(n == 1){
- print(mpow(m,2));
- return 0;
- }
- if(n==2){
- print(4ll*mpow(3,m-1)%p);
- return 0;
- }
- if(n==3){
- print(112ll*mpow(3,m-3)%p);
- return 0;
- }
- if(n==4){
- if(m==4)puts("912");
- else print(2688ll*mpow(3,m-5)%p);
- return 0;
- }
- if(n==5){
- if(m==5)puts("7136");
- else print(21312ll*mpow(3,m-6)%p);
- return 0;
- }
- if(n==6){
- if(m==6)puts("56768");
- else print(170112ll*mpow(3,m-7)%p);
- return 0;
- }
- if(n==7){
- if(m==7)puts("453504");
- else print(1360128ll*mpow(3,m-8)%p);
- return 0;
- }
- if(n==8){
- if(m==8)puts("3626752");
- else print(10879488ll*mpow(3,m-9)%p);
- return 0;
- }
- }