A - Pawn on a Grid
模拟。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 15;
int n, m, ans;
char s[N];
int main() {
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i ++) {
scanf("%s", s + 1);
for(int j = 1; j <= m; j ++) ans += s[j] == '#';
}
printf("%d", ans);
return 0;
}
B - Inverse Prefix Sum
前缀和相减,数列基础。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define ll long long
const int N = 15;
int n;
ll a[N];
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i ++) scanf("%lld", &a[i]);
for(int i = 1; i <= n; i ++) {
printf("%lld ", a[i] - a[i - 1]);
}
return 0;
}
C - Extra Character
枚举,判断。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 5e5 + 5;
int n, m, ans, dp[N][2];
char s[N], t[N];
int main() {
scanf("%s %s", s + 1, t + 1);
n = strlen(s + 1), m = strlen(t + 1);
for(int i = 1; i <= n; i ++) {
if(s[i] != t[i]) {
printf("%d", i);
return 0;
}
}
printf("%d", m);
return 0;
}
D - Factorial and Multiple
若 a 为 b 的倍数,那么 a 一定包含 b 的所有质因数。
因此我们考虑对 n 进行质因数分解,并求出每个质因数的数量,
最后找出符合条件的答案即可。
具体操作看代码。
#include <bits/stdc++.h>
using namespace std;
long long k, i, a, n, x, ans=1;
int main() {
scanf("%lld", &k);
for(i = 2; i * i <= k; i ++) {
a = n = 0;;
while(k % i == 0) k /= i, a++;
while(a > 0) {
n += i, x = n;
while(x % i == 0) x /= i, a--;
}
ans = max(ans, n);
}
ans = max(ans,k);
printf("%lld", ans);
return 0;
}
E - Critical Hit
#include <bits/stdc++.h>
#include <atcoder/modint>
using namespace std;
using namespace atcoder;
using mint = modint998244353;
int main() {
int n,p;
mint x=1, ans=1;
cin >> n >> p;
for(int i=1;i<n;i++){
x=mint(1)-x*mint(p)/mint(100);
ans+=x;
}
cout << ans.val() <<endl;
return 0;
}
F - Pay or Receive
有向带权图。
显然,如果询问的两个点不在同一个连通块,那么无解。
否则若存在非零环,则可以无穷大,正环就无限走,负环就无限反着走。
判环的就搜索的时候标记一下当前点是否被访问过多次。
又因为每条路径唯一,所以两点的路径费用唯一。
所以可以任取一个起点开始bfs。
最后的 cost(x,y)= d[y]-d[x].
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define mk make_pair
#define fi first
#define se second
#define ll long long
const int N = 1e5 + 5;
int n, m, q, tot, vis[N], f[N];
ll dp[N];
vector< pair<int, int> > G[N];
void dfs(int x) {
vis[x] = tot;
int ver;
for(int i = 0; i < G[x].size(); i ++) {
ver = G[x][i].fi;
if(vis[ver]) {
f[tot] |= dp[x] - dp[ver] + G[x][i].se != 0;
}
else dp[ver] = dp[x] + G[x][i].se, dfs(ver);
}
}
int main() {
int u, v, w;
scanf("%d %d %d", &n, &m, &q);
for(int i = 1; i <= m; i ++) {
scanf("%d %d %d", &u, &v, &w);
G[u].push_back(mk(v, w));
G[v].push_back(mk(u, -w));
}
for(int i = 1; i <= n; i ++) {
if(!vis[i]) tot++, dfs(i);
}
while(q --) {
scanf("%d %d", &u, &v);
if(vis[u] ^ vis[v]) puts("nan");
else if(f[vis[u]]) puts("inf");
else printf("%lld\n", dp[v] - dp[u]);
}
return 0;
}
标签:AtCoder,main,using,int,题解,namespace,ans,280,include
From: https://www.cnblogs.com/Spring-Araki/p/17161853.html