• Atcoder Beginner Contest 166


    VP赛况如下:

    前言:感觉这一场题目难度还是比较贴近新生的,我一个codeforces小蓝名一小时居然AK了,F题数据有点水(?)暴力dfs居然都能过...

    A:A?C

    题意:给你字符串,如果字符串是ABC,那么就输出ARC;反之输出ABC。

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        string a;cin>>a;
        if(a[1]=='R') cout<<"ABC"<<endl;
        if(a[1]=='B') cout<<"ARC"<<endl;
    }

    B:Trick or Treat

    题意:给你n个数,k个组,每组有d个数,然后输入d个数,标记,最后查找有[1,n]中有几个数字没被访问过

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+5;
    bool vis[maxn];
    int main(){
        int n,k;cin>>n>>k;
        for(int i=1;i<=k;i++){
            int x;cin>>x;
            for(int j=1;j<=x;j++){
                int q;cin>>q;
                vis[q]=true;
            }
        }
        int cnt=0;
        for(int i=1;i<=n;i++){
            if(!vis[i]) ++cnt;
        }
        cout<<cnt<<endl;
    }

    C:Peaks

    题意:有N个观测台,M条边,每个人有一个高度H,输出有多少个节点满足它比所有它相邻的观测台高。

    解法:我习惯用链式前向星来存边,思路就是查找每个节点的边,看是否>=他,如果是的话,那就不行了,否则ans++;

    #include<bits/stdc++.h>
    #define ll long long
    #define rep(i,a,n) for(int i=a;i<=n;i++)
    #define per(i,n,a) for(int i=n;i>=a;i--)
    #define endl '
    '
    #define mem(a,b) memset(a,b,sizeof(a))
    #define IO ios::sync_with_stdio(false);cin.tie(0);
    using namespace std;
    const int INF=0x3f3f3f3f;
    const ll inf=0x3f3f3f3f3f3f3f3f;
    const int mod=1e9+7;
    const int maxn=1e5+5;
    int h[maxn];
    int tot,head[maxn];
    struct E{
        int to,next;
    }edge[maxn<<1];
    void add(int u,int v){
        edge[tot].to=v;
        edge[tot].next=head[u];
        head[u]=tot++;
    }
    int main(){
        int n,m;cin>>n>>m;mem(head,-1);
        for(int i=1;i<=n;i++) cin>>h[i];
        for(int i=1;i<=m;i++){
            int u,v;cin>>u>>v;
            add(u,v);add(v,u);
        }
        int ans=0;
        for(int u=1;u<=n;u++){
            int flag=0;
            for(int i=head[u];i!=-1;i=edge[i].next){
                int v=edge[i].to;
                if(h[v]>=h[u]){
                    flag=1;break;
                }
            }
            if(!flag) ++ans;
        }
        cout<<ans<<endl;
    }

    D:I hate Factorization

    题意:给定X,输出一组(A,B),满足A5-B5=X.

    解法:看了一下数据范围,直接枚举暴力就行(写wa四次,一个小地方没开LL,好菜啊.....逃)

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    int main(){
        ll x;cin>>x;
        for(ll i=-1000;i<=1000;i++){
            for(ll j=-1000;j<=1000;j++){
                ll a=i*i*i*i*i;ll b=j*j*j*j*j;
                if(x==(a-b)){
                    cout<<i<<" "<<j<<endl;
                    return 0;
                }
            }
        }
    }

    E:This Message Will Self-Destruct in 5s

    题意:给一个长度为N的序列A,求有多少数字对(i,j)满足Ai+Aj=|i - j|。

    思路:我不太会数论..想了一会才明白。原式等价于:A+ j = i - Ai,那么只需要每次查询 i - Ai的个数,然后更新Ai + i即可。

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int maxn=2e5+5;
    int a[maxn];
    int main(){
        int n;cin>>n;
        map<int,int> mp;ll ans=0;
        for(int i=1;i<=n;i++){
            int x;cin>>x;
            ans+=mp[i-x];
            mp[i+x]++;
        }
        cout<<ans<<endl;
    }

    F: Three Variables Game

    题意:给N个字符串("AB","AC","BC")和A,B,C三个值,按顺序执行每个字符串的操作,如果这个字符串是"AB",那么将执行A--,B++或A++,B--,其它字符串类似,并且每一个操作之后A,B,C三个值不能小于0,判断是否按顺序执行下来,如是,并要求具体操作序列。

    解法:看到这个题,第一反应就是dfs,配套剪枝就行(本来想想先莽一发dfs,但没想到过了,Exe_time也只有33ms,怀疑数据有点水?)

    #include<bits/stdc++.h>
    #define ll long long
    #define rep(i,a,n) for(int i=a;i<=n;i++)
    #define per(i,n,a) for(int i=n;i>=a;i--)
    #define endl '
    '
    #define mem(a,b) memset(a,b,sizeof(a))
    #define IO ios::sync_with_stdio(false);cin.tie(0);
    using namespace std;
    const int INF=0x3f3f3f3f;
    const ll inf=0x3f3f3f3f3f3f3f3f;
    const int mod=1e9+7;
    const int maxn=1e5+5;
    int n,a,b,c;
    string s[maxn];
    vector<char> vec;
    int flag;
    void dfs(int x,int a,int b,int c){
        if(flag) return ;
        if(x==n+1&&a>=0&&b>=0&&c>=0){
            flag=1;
            puts("Yes");
            for(int i=0;i<n;i++) cout<<vec[i]<<endl;
            return ;
        }
        if(s[x][0]=='A'&&s[x][1]=='B'){
            if(a+1>=0&&b-1>=0&&c>=0){
                vec.push_back('A');
                dfs(x+1,a+1,b-1,c);
                vec.pop_back();
            }
            if(a-1>=0&&b+1>=0&&c>=0){
                vec.push_back('B');
                dfs(x+1,a-1,b+1,c);
                vec.pop_back();            
            }
        }
        else if(s[x][0]=='A'&&s[x][1]=='C'){
            if(a+1>=0&&b>=0&&c-1>=0){
                vec.push_back('A');
                dfs(x+1,a+1,b,c-1);
                vec.pop_back();
            }
            if(a-1>=0&&b>=0&&c+1>=0){
                vec.push_back('C');
                dfs(x+1,a-1,b,c+1);
                vec.pop_back();            
            }        
        }
        else if(s[x][0]=='B'&&s[x][1]=='C'){
            if(a>=0&&b-1>=0&&c+1>=0){
                vec.push_back('C');
                dfs(x+1,a,b-1,c+1);
                vec.pop_back();
            }
            if(a>=0&&b+1>=0&&c-1>=0){
                vec.push_back('B');
                dfs(x+1,a,b+1,c-1);
                vec.pop_back();            
            }        
        }
    }
    int main(){
        cin>>n>>a>>b>>c;flag=0;
        for(int i=1;i<=n;i++) cin>>s[i];
        dfs(1,a,b,c);
        if(!flag) puts("No");
    }
  • 相关阅读:
    MongoDB 部署复制集(副本集)
    MongoDB shell 2 副本集方法
    MongoDB shell 1 数据库方法
    MongoDB shell 0 集合方法
    CentOS7 安装 zabbix
    MongoDB Shell db.runCommand
    MongoDB Index
    MongoDB 启动报错
    MongoDB 聚合查询报错
    MongoDB 聚合函数
  • 原文地址:https://www.cnblogs.com/Anonytt/p/12824915.html
Copyright © 2020-2023  润新知