E
茜茜的計算器
https://ac.nowcoder.com/acm/contest/84851/E
一共可以分成兩部分:
-
只考慮1,3,8,0 四個數(shù)字,對于橫對稱軸有4^n種情況;對于縱對稱軸有8,0兩個數(shù)字,有2^n種情況;而同時滿足橫軸和縱軸的也只有0,8兩個數(shù)字,所以抵消縱對稱的情況。第一部分只有4^n種。
-
考慮2和5兩個數(shù)字,假設一個位置放了2(5),另一邊必須放上5(2),而對稱位置有 m = n / 2 個,從m個位置中選擇1,2,3,...,m個位置來放2或者5,每個位置有2種情況,其他位置只能放8或者0,每個位置也有2種情況,來保持縱軸對稱,于是有表達式
如果 n 是奇數(shù),中間位置可以放8或者0兩個數(shù)字,要多*2。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll n, m;
int mod = 1e9 + 7;
ll qm(ll x, ll y){
ll ret = 1;
while(y){
if(y&1) ret = ret * x % mod;
x = x * x % mod;
y >>= 1;
}
return ret;
}
void solve()
{
cin >> n;
ll res = 0;
res = (res + qm(4, n)) % mod;
m = n / 2;
if(n % 2 == 1) {
res = (res + 2*(qm(2, m) - 1 + mod) * qm(2, m) % mod) % mod;
}
else {
res = (res + (qm(2, m) - 1 + mod) * qm(2, m) % mod) % mod;
}
cout << res;
}
int main()
{
// 請在此輸入您的代碼
ios::sync_with_stdio(0);
cin.tie(0);
int _ = 1;
// cin >> _;
while(_--) solve();
}