A:把b=n;
#include<cstdio>
#include<bits/stdc++.h>
#include<algorithm>
#include<string.h>
using namespace std;
int main() {
double n;
scanf("%lf", &n);
printf("%.6lf\n", n);
return 0;
}
D:由于是个完全图,选择一个权值最小的点,其他所有的点向它连接就行了。注意点为1的时候输出0;
#include<cstdio>
#include<bits/stdc++.h>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long LL;
const int MAXN = 1e5 + 10;
LL a[MAXN];
int main() {
LL n; LL sum = 0, ans = (1ll << 60);
scanf("%lld", &n);
for(int i = 1; i <= n; ++i) {
scanf("%lld", &a[i]);
sum += a[i];
ans = min(ans, a[i]);
}
printf("%lld\n", sum + ans * (n - 2));
return 0;
}
G:枚举区间长度,那么对于区间长度为len时,a[i]位置就会被覆盖len次(前端和后端的覆盖预处理,达不到len次);
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
const LL mod = 1e9 + 7;
const int MAXN = 3e5 + 10;
LL a[MAXN], w[MAXN], b[MAXN];
LL sum[MAXN];
int main() {
int n;
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
scanf("%lld", &a[i]);
sum[i] = a[i] + sum[i - 1];
sum[i] %= mod;
}
for(int i = 1; i <= n; ++i) scanf("%lld", &w[i]);
/*
LL u = 0;
for(int i = 1; i <= n; ++i) {
for(int j = i; j <= n; ++j) {
u += (sum[j] - sum[i - 1]) * w[j - i + 1];
u %= mod;
}
}
printf("## %lld\n", u);
*/
for(int i = n; i >= 1; --i) {
b[i] = b[i + 1] + (a[i] * (n - i + 1ll)) % mod;
b[i] %= mod;
// printf("# %lld\n", b[i]);
}
LL res = 0, ans = 0;
for(LL i = 1; i <= n; ++i) {
res = res + (a[i] * i) % mod; res %= mod;
// printf("%lld %lld\n", res, ans);
LL cnt = (sum[n - i] - sum[i] + mod) % mod * i % mod;
ans += (res + cnt + b[n - i + 1]) % mod * w[i];
ans %= mod;
}
printf("%lld\n", ans);
return 0;
}
H:
结论:每层的黑点数都是偶数则后手胜,否则先手胜;
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
#define met(s) memset(s, 0, sizeof(s))
#define rep(i, a, b) for(int i = a; i <= b; ++i)
template <class T> inline void scan_d(T &ret) {
char c; ret = 0;
while ((c = getchar()) < '0' || c > '9');
while (c >= '0' && c <= '9') {
ret = ret * 10 + (c - '0'), c = getchar();}}
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const LL mod = 1e9 + 7;
const int MAXN = 1e3 + 5;
vector<int> G[MAXN];
int col[MAXN], num[MAXN];
void dfs(int x, int fa, int d) {
if(col[x] == 1) num[d]++;
for(int i = 0; i < G[x].size(); ++i) {
int u = G[x][i];
if(u == fa) continue;
dfs(u, x, d + 1);
}
}
int main() {
int n;
scanf("%d", &n);
for(int i = 1; i <= n; ++i) scanf("%d", &col[i]);
for(int i = 1; i < n; ++i) {
int a, b;
scanf("%d %d", &a, &b);
G[a].push_back(b);
G[b].push_back(a);
}
dfs(1, -1, 0);
bool flag = true;
for(int i = 0; i < MAXN; ++i) {
if(num[i] & 1) {
flag = false;
break;
}
}
if(!flag) puts("First");
else puts("Second");
return 0;
}
I:
带根节点:
(
a
[
i
]
+
1
)
∗
(
a
[
i
+
1
]
+
1
)
∗
(
a
[
i
+
2
]
+
1
)
.
.
.
(a[i] + 1)*(a[i + 1] + 1) * (a[i + 2] + 1)...
(a[i]+1)∗(a[i+1]+1)∗(a[i+2]+1)...
不带根节点:
k
∗
(
k
+
1
)
/
2
k * (k + 1) / 2
k∗(k+1)/2.
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
const LL mod = 998244353;
const int MAXN = 1e7 + 10;
int main() {
int n; LL sum = 0, ans = 1, k;
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
scanf("%lld", &k);
sum += (k * (k + 1) / 2) % mod;
sum %= mod;
ans *= (k + 1);
ans %= mod;
}
printf("%lld\n", (ans + sum) % mod);
return 0;
}
J:
不说话的也有可能是复读机;
#include<cstdio>
#include<bits/stdc++.h>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long LL;
const int MAXN = 1e5 + 10;
char str[1010][210];
int a[2010], b[2010], vis[2010];
int vi[2010];
int main() {
int n, m, ans; int p = 0;
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; ++i) {
getchar();
scanf("%d %s", &a[i], str[i]);
vi[a[i]] = 1;
if(i == 1) ans = a[i];
else if(a[i] != ans) {
if(!strcmp(str[i], str[i - 1])) {
b[p++] = a[i];
} else vis[a[i]] = 1;
}
}
for(int i = 1; i <= n; ++i) {
if(!vi[i]) b[p++] = i;
}
sort(b, b + p); bool flag = false;
for(int i = 0; i < p; ++i) {
if(!vis[b[i]]) {
if(flag) printf(" ");
printf("%d", b[i]);
vis[b[i]] = 1;
flag = true;
}
}
puts("");
return 0;
}