A - Round One
直接按题意模拟,没出现过的就是答案.
#include <bits/stdc++.h> using namespace std; int main() { int a,b; bool f[4]; memset(f,false,sizeof f); cin>>a>>b;f[a]=true,f[b]=true; for(int i=1;i<=3;i++) if(!f[i]) cout<<i<<'\n'; return 0; }
B - Strings with the Same Length
直接拿string,模拟加即可.
#include <bits/stdc++.h> using namespace std; int main() { int n;cin>>n; string s,t,ans="";cin>>s>>t; int len=s.size(); for(int i=0;i<len;i++) { ans+=s[i]; ans+=t[i]; }cout<<ans<<'\n'; return 0; }
C - Snack
最小公倍数就是答案.
#include <bits/stdc++.h> using namespace std; int main() { long long a,b; cin>>a>>b; cout<<a*b/__gcd(a,b)<<'\n'; return 0; }
D - Brick Break
算出序列1,2,3,4,5...,n的最长重合即可.
#include <bits/stdc++.h> using namespace std; int main() { int x,ans=1,n,q; cin>>n;q=n; while(q--) { cin>>x; if(x==ans) ans++; }ans==1?puts("-1"):printf("%d\n",n-ans+1); return 0; }
E - Double Factorial
因为式子中奇数一定没解,不存在会有末尾0的情况,然后一定输出0.
偶数中质因子2的数量一定大于5的数量,所以问你有多少个末尾0,就是问你这个式子有多少个质因子5,然后相乘用加法,我们会发现只有10,20,30,40,而到了50又多了一个5的质因子,所以我们按5的倍数进行模拟+ans即可.
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll Ans(ll n) { if(n==0) return 0; else return n/5+Ans(n/5); } int main() { ll n;cin>>n; if(n&1) puts("0"); else cout<<Ans(n/2)<<'\n'; return 0; }
F - Playing Tag on Tree
树上路径是唯一的,很显然的一个结论就是第一个人肯定会被第二个人逼到叶子节点,然后我们奇偶模拟一下,答案一定是第二个人到叶子节点的上一个节点的距离.然后我们存下叶子节点,假如第二个人比第一个人去的慢,说明可以作为答案,更新ans.这里我们需要提前存储所有点到这两个点的距离,做两次bfs即可.
#include <bits/stdc++.h> using namespace std; const int N=1e5+5; vector<int>g[N]; vector<int>cnt; int deg[N],disv[N],disu[N]; bool vis[N]; void bfs(int u,int dis[]) { memset(vis,false,sizeof vis); queue<int>q;q.push(u); while(q.size()) { int T=q.front();q.pop(); vis[T]=true; for(int v:g[T]) if(vis[v]) continue; else dis[v]=dis[T]+1,q.push(v); } } int main() { int n,u,v; cin>>n>>u>>v; for(int i=1;i<n;i++) { int a,b;cin>>a>>b; g[a].push_back(b); g[b].push_back(a); deg[a]++,deg[b]++; }bfs(u,disu);bfs(v,disv); for(int i=1;i<=n;i++) if(deg[i]==1) cnt.push_back(i); int ans=0; for(int pos:cnt) if(disu[pos]<disv[pos]) ans=max(ans,disv[pos]-1); cout<<ans<<'\n'; return 0; }