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;
}

 

posted @ 2019-03-18 21:32  Dilthey  阅读(194)  评论(0编辑  收藏  举报