由題意可以得出將u和i都轉化為i的方法,得到公式:s + 6 * k = 2^m排除某些情況,s必須為偶數,所以 q = s/2; q + 3*k = 2^n
因為q % 3 != 0, 所以q = 3*a + b (b == 1 || b== 2)
即 3*c + b = 2^n = 2^(2*x + y) = 2^y*(1+3)^x = 2^y * (1+3*w)
因為y == 0 || y == 1,所以 b== 1 || b == 2 均有解,故q % 3 != 0 即可滿足條件
#include #include using namespace std;
const int maxn = 1000005;
#define ok printf("yes\n")
#define no printf("no\n")
char s[maxn];
int main()
for (int i = 1; i< len; ++i)
p += s[i]=='i'?1:3;
}if (p == -1 )
if ((p & 1) == 0 && p %3 != 0 || p == 1)
ok;else
no;}
return 0;
}
dp、逆元:費馬小定理或輾轉相除
#include#include#include#pragma comment(linker, "/stack:1024000000,1024000000")
using namespace std;
#define ll __int64
const int maxn = 300005;
const ll mod = 1000000007;
ll cc[maxn];
ll mpower(ll a, ll b)
return res;
}ll invsele(ll a)
int n, m, k;
int da[maxn], mmp[maxn];
ll dp[maxn];
int main()
cc[n-k] = 1;
for (int i = n-k+1; i<= n; ++i)
for (int i = m; i>= 1; --i)
if (n-cnt > k)
dp[i] = cc[cnt]*mpower(tn-1, k-n+cnt)%mod*mpower(tn, n-cnt)%mod;
for (int j = 2; i*j <= m; ++j)
}for (int i = 1; i<= m; ++i)
puts("");
} return 0;
}
DLX演算法合集 I
dlx是一種相當神奇的資料結構,通常用於解決矩陣 多為稀疏矩陣 的 重複 精確 覆蓋的問題。不過一般這類問題的難點是抽出轉化關係,剩下的幾乎就是套模板 include include include include include include includeusing namespace std...
字尾自動機合集 I
有關字尾自動機的理論和證明各路大神的部落格多如牛毛,就不細說。貼圖太佔載入速度了,還是去看原版的解析吧 對於每個state點,father指向與該節點可接收相同字尾的節點,其表示的字串通常是當前節點表示字串的後面部分,因此state step sate father step 代表從任一字尾串起始走...
數論 又是畢業季I 又是畢業季II
題目簡化 為了把畢業晚會辦得更好,老師想要挑出默契程度最大的 k 個人參與畢業晚會彩排。可是如何挑呢?老師列出全班同學的號數 1,2,n 並且相信 k 個人的默契程度便是他們的最大公約數 這不是迷信哦 這可難為了他,請你幫幫忙吧!輸入格式 兩個空格分開的正整數n和k。n k 1 k 1e9,n 1e...