Codeforces 659 - A/B/C/D/E/F/G - (Undone)
链接:https://codeforces.com/contest/659
A - Round House - [取模]
AC代码:
#include<bits/stdc++.h> using namespace std; int n,a,b; int main() { cin>>n>>a>>b; a=(a-1+b); while(a<0) a+=n; a%=n; cout<<a+1<<endl; }
B - Qualifying Contest - [水]
AC代码:
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+5; const int maxm=1e4+5; int n,m; struct P{ string name; int reg,sco; bool operator<(const P& o)const { return sco>o.sco; } }p; vector<P> R[maxm]; int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++) { cin>>p.name>>p.reg>>p.sco; R[p.reg].push_back(p); } for(int i=1;i<=m;i++) { sort(R[i].begin(),R[i].end()); if(R[i].size()>2 && R[i][1].sco<=R[i][2].sco) cout<<"?\n"; else cout<<R[i][0].name<<" "<<R[i][1].name<<'\n'; } }
C - Tanya and Toys - [贪心水题]
AC代码:
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+5; int n,m; map<int,bool> mp; int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin>>n>>m; mp.clear(); for(int i=1,x;i<=n;i++) cin>>x, mp[x]=1; vector<int> ans; for(int i=1;i<=(int)1e9;i++) { if(mp[i]) continue; if(m>=i) ans.push_back(i), m-=i; else break; } cout<<ans.size()<<'\n'; for(auto x:ans) cout<<x<<' '; }
D - Bicycle Race - [叉乘]
AC代码:
#include<bits/stdc++.h> using namespace std; typedef pair<int,int> P; #define mk(x,y) make_pair(x,y) #define fi first #define se second const int maxn=1e3+5; int n; P p[maxn]; int cross(P a,P b) { return a.fi*b.se-b.fi*a.se; } int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin>>n; for(int i=0;i<n+1;i++) cin>>p[i].fi>>p[i].se; int cnt=0; for(int i=0;i<n;i++) { P pre=mk(p[i].fi-p[(i-1+n)%n].fi,p[i].se-p[(i-1+n)%n].se); P nxt=mk(p[(i+1)%n].fi-p[i].fi,p[(i+1)%n].se-p[i].se); if(cross(pre,nxt)>0) cnt++; } cout<<cnt<<endl; }
E - New Reform - [DFS判环]
题解:对于一个子图,如果存在环,那么肯定可以做到没有一个城市没有入弧;如果一个子图是一棵树,那么可以任选一个城市作为根,只有该城市没有入弧,答案增加一。
AC代码:
#include<bits/stdc++.h> #define pb(x) push_back(x) using namespace std; const int maxn=1e5+10; int n,m; vector<int> g[maxn]; bool vis[maxn]; bool flag; void dfs(int x,int pre) { vis[x]=1; for(auto y:g[x]) { if(y==pre) continue; if(!vis[y]) dfs(y,x); else flag=1; } } int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin>>n>>m; for(int i=1,x,y;i<=m;i++) { cin>>x>>y; g[x].pb(y), g[y].pb(x); } int cnt=0; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) { if(vis[i]) continue; flag=0; dfs(i,-1); if(!flag) cnt++; } cout<<cnt<<endl; }
转载请注明出处:https://dilthey.cnblogs.com/