B. Diagonal Cut
注意到,对m和n求一个最大公约数得g,就相当于对角线上有g个(m/g)*(n/g)的大巧克力,如果,m/g 和 n/g均为奇数时,则有一个巧克力棒会被均分,其他情况都不能。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a, b;
int main()
{
cin >> a >> b;
ll g = __gcd(a, b);
a /= g, b /= g;
if((a & 1) && (b & 1)){
cout << g << "\n";
}else cout << 0 << "\n";
}
K.Summer Trip
枚举从‘a’到‘z’的每一个字母,计算以这个字母当排头所能构成的方案数,时间复杂度为O(26*30n)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 100010;
int n;
char s[N];
ll res = 0;
bool vis[30];
int main()
{
scanf("%s", s + 1);
n = strlen(s + 1);
for(char ch = 'a';ch <= 'z'; ++ ch) {
int i = 1;
while(s[i++] != ch && i <= n);
vis[ch - 'a'] = 1;
for(;i <= n; ++ i) {
if(s[i] == ch) {
memset(vis, 0, sizeof(vis));
vis[ch - 'a'] = 1;
}
if(vis[s[i] - 'a']) continue;
vis[s[i] - 'a'] = 1;
res ++;
}
memset(vis, 0, sizeof(vis));
}
printf("%lld\n", res);
}