Task Name Time Limit Memory Limit
A Coffee 2 sec 1024 MB Submit
only if its 3-rd and 4-th characters are equal and its 5-th and 6-th characters are also equal.
简单比较一下即可
B Golden Coins 2 sec 1024 MB Submit
只有两种硬币格式 500 和 5, 分别能获得快乐值 1000 和 5, 那么把 X先换成500硬币再将剩下的换成5硬币即可
C Traveling Salesman around Lake 2 sec 1024 MB Submit
先排个序,把这些房子当成一个环 将两两之间的距离相加 然后找到最大的距离, 减去最大距离 即为最小值
D Line++ 2 sec 1024 MB Submit
从1到n是一条链,然后加一条x到y的边 问最短距离为1、2、3……的边的数量为?
可以直接暴力枚举所有的情况 例如说 计算点a 到 点b的距离 先分别计算 从a->x+1+y->b(abs|x-a|+1+abs|y-b|) 和 a->y+1+b->x 的距离(abs|x-b|+1+|a-y|)、abs|a-b|,然后取最小值, 计数
最后输出所有的值即可
E Red and Green Apples 2 sec 1024 MB Submit
要吃X个红苹果 Y个绿苹果, 然后分别有A个红苹果、B个绿苹果 和 C个多彩苹果 每个苹果都有对应的美味值 问最大的美味值为多少
其中多彩苹果可以当红苹果 也可以 当绿苹果, 做法是选从红苹果中选X个最大美味值的苹果 从绿苹果中选择Y个最大美味值的苹果
然后与多彩苹果构成一个新的数组, 从中选择X+Y的最大美味值的苹果 统计和 即可
F Distributing Integers 3 sec 1024 MB Submit
输入N, 表示有顶点1……N 然后输入N-1条边, 问分别从1……N出发分别有多少种路径遍历所有的顶点
每次只能从已∏经走过的顶点 跳到 与之前顶点有边相连的顶点,
看了半天, 好像懂了 求每个顶点作为起始点的DAG拓扑数,
每次先计算每个点的子节点数和子节点节点数的乘积和 再单独计算每个点作为起点的路径数
ans[i] = (n-siz[v]) *(n-1)! / ∏ mul[v]
enmmmmmm 还是一知半解 我再想想
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define ll long long #define all(v) (v).begin(), (v).end() #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 kMod = 1e9 + 7; const int kMaxN = 1e6 + 5;
void taskA() { string s; cin >> s; int n = s.size(); cout << (s[2]==s[3] && s[4]==s[5] ? "Yes " : "No "); return; }
void taskB() { int n; cin >> n; int ans = 0; ans += (n/500)*1000; n%=500; ans += (n/5)*5; cout << ans; return; }
void taskC() { int n,k; cin >> k >> n; vector<int> a(n); _for(i,0,n) cin >> a[i]; sort(a.begin(), a.end()); ll ans = 0; int ma = 0; _for(i,1,n) { ans += (a[i]-a[i-1]); ma = max(ma, a[i]-a[i-1]); } ans += (k-a[n-1]+a[0]); ma = max(ma, k-a[n-1]+a[0]); cout << ans-ma; return; }
void taskD() { int n,x,y; cin >> n >> x >> y; vector<int> cnt(n, 0); _rep(i,1,n) _rep(j,i,n) { int dis = j-i; int d1 = abs(i-x)+abs(j-y)+1; int d2 = abs(i-y)+abs(j-x)+1; d1 = min(d1, d2); dis = min(dis, d1); cnt[dis]++; } _for(i,1,n) { cout << cnt[i] << " "; } return; }
void taskE() { int x,y,a1,b1,c1; cin >> x >> y >> a1 >> b1 >> c1; vector<int> a(a1), b(b1), c(c1+x+y); _for(i,0,a1) cin >> a[i]; _for(i,0,b1) cin >> b[i]; _for(i,0,c1) cin >> c[i]; sort(all(a)); sort(all(b)); reverse(all(a)); reverse(all(b)); _for(i,0,x) c.push_back(a[i]); _for(i,0,y) c.push_back(b[i]); sort(all(c));reverse(all(c)); ll ans = 0; _for(i,0,x+y) ans += c[i]; cout << ans << " "; return; }
const int N = 2e5+100; const int mod = 1e9+7; int siz[N],n; ll mul[N],fac[N],ans[N]; vector<int> g[N]; ll fpow(ll a, ll b) { ll ret = 1; while(b) { if(b&1) ret = ret*a%mod; b >>= 1; a = a*a%mod; } return ret; } void predfs(int u, int fa) { siz[u] = mul[u] = 1; for(int v : g[u]) { if(v == fa) continue; predfs(v,u); siz[u] += siz[v]; mul[u] = mul[u]*mul[v]%mod; } mul[u] = mul[u]*siz[u]%mod; } void dfs(int u, int fa, ll tmp) { for(int v : g[u]) if(v != fa) tmp = tmp*mul[v]%mod; ans[u] = fac[n-1]*fpow(tmp, mod-2)%mod; for(int v : g[u]) if(v != fa) dfs(v, u, tmp*fpow(mul[v], mod-2)%mod*(n-siz[v])%mod); } void taskF() { scanf("%d", &n); _for(i,1,n) { int x,y; scanf("%d%d", &x, &y); g[x].push_back(y); g[y].push_back(x); } fac[0] = 1; _rep(i,1,n) fac[i] = fac[i-1]*i%mod; predfs(1, 0); dfs(1,0,1); _rep(i,1,n) printf("%lld ", ans[i]); return; }
int main(){ //ios::sync_with_stdio(false), cin.tie(nullptr); //taskA(); //taskB(); //taskC(); //taskD(); //taskE(); taskF(); return 0; }