求助!!!感觉公式没错但是WA
查看原帖
求助!!!感觉公式没错但是WA
987758
CaoSheng_zzz楼主2024/8/8 11:36
#include <algorithm>
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <queue>
#include <map>
#include <set>
#define prt printf
#define ll long long
#define int long long
#define spc prt(" ")
#define ent prt("\n")
#define pr_ prt("---")
#define prx prt("***")
#define prtn (putchar('N') , putchar('o'))
#define prty (putchar('Y') , putchar('e') , putchar('s'))
using namespace std;

int read(){
	int f = 1 , k = 0;
	char c = getchar();
	while(c < '0' || c > '9'){
		if(c == '-') f = -1;
		c = getchar() ;
	}
	while(c >= '0' && c <= '9'){
		k = (k << 3) + (k << 1) + (c ^ 48);
		c = getchar() ;
	}
	return (f == 1 ? k : -k);
}

void output(int now){
	if(now < 0){
		putchar('-');
		output(- now);
	}
	else{
		if(now > 9) output(now / 10);
		putchar((now % 10) ^ 48);
	}
}

const int mod = 1e9 + 7;

int power(int base , int s){ int res = 1 ; while(s) { if(s & 1) res = res * base % mod ; base = base * base % mod ; s >>= 1 ;} return res % mod ;} 

signed main(){
	int n = read() , m = read() ; vector<int> mul(n + 1) ; mul[0] = 1 ;
	for(int i=1 ; i<=n ; i++) mul[i] = mul[i - 1] * 2 ;
	if(n > m) swap(n , m) ;
	if(n == 1) return output(power(2 , m)) , ent , 0;
	if(n == m){
		if(! (n ^ 2)) return output(12) , ent , 0;
		if(! (n ^ 3)) return output(112) , ent , 0;
		if(! (n ^ 4)) return output(912) , ent , 0;
		int ans = 912;
		for(int i=5 ; i<=n ; i++) ans = mul[3] * ans % mod - 5 * mul[i] ;
		return output(ans) , ent , 0;
	}
	else{
		if(n + 1 == m){
			if(! (n ^ 2)) return output(3 * 12) , ent , 0;
			if(! (n ^ 3)) return output(3 * 112) , ent , 0;
			if(! (n ^ 4)) return output(3 * 912) , ent , 0;
			int ans = 912;
			for(int i=5 ; i<=n ; i++) ans = mul[3] * ans % mod - 5 * mul[i] ;
			return output(3 * ans % mod - 3 * mul[n]) , ent , 0;
		}
		if(n == 2) return output(4 * power(3 , m - 1) % mod) , ent , 0;
		if(n == 3 && m >= 3) return output(112 * power(3 , m - 3) % mod) , ent , 0;
		if(n == 4){
			int ans = 912 ;
			for(int i=n+2 ; i<=m ; i++) ans = ans * 3 % mod;
			return output(ans) , ent , 0;
		}
		else{
			int ans = 912;
			for(int i=5 ; i<=n ; i++) ans = mul[3] * ans % mod - 5 * mul[i] ;
			for(int i=n+2 ; i<=m ; i++) ans = ans * 3 % mod;
			return output(ans) , ent , 0;
		}
	}
}
2024/8/8 11:36
加载中...