比赛链接
A 校园活动
数据范围只有10^3, 暴力枚举每种情况即可。
#include<bits/stdc++.h>
using namespace std;
#define _for(i, a, b) for (int i = (a); i < (b); ++i)
#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)
const int N = 1010;
int w[N], n, sum;
bool check(int x)
{
int s = 0;
_for(i, 0, n) {
s += w[i];
if (s == x) s = 0;
if (s > x) return false;
}
return true;
}
int main()
{
#ifdef LOCAL
freopen("data.in", "r", stdin);
#endif
scanf("%d", &n);
_for(i, 0, n)
{
scanf("%1d", &w[i]);
sum += w[i];
}
int ans = -1;
_rep(i, 2, n) if(sum % i == 0 && check(sum / i))
ans = max(ans, i);
printf("%d\n" , ans);
return 0;
}
C.CG的通关秘籍
#include<bits/stdc++.h>
using namespace std;
#define _for(i, a, b) for (int i = (a); i < (b); ++i)
#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define mod(x) (x) % 1000000007
const int N = 1000010;
typedef long long LL;
int n, m;
LL qmi(LL a, LL b)
{
LL ans = 1;
while (b)
{
if (b & 1) ans = mod(ans * a);
a = mod(a * a);
b >>= 1;
}
return mod(ans);
}
int main()
{
#ifdef LOCAL
freopen("data.in", "r", stdin);
#endif
int T;
scanf("%d", &T);
while (T--)
{
scanf("%d%d", &n, &m);
LL mul = qmi(m, n - 2);
LL res = mod(m * 1LL * (3 * m - 3) / 2);
LL ans = mod(mod(res * (n - 1)) * mul);
printf("%lld\n", ans);
}
return 0;
}