zoukankan      html  css  js  c++  java
  • 补题 [Codeforces Round #648 (Div. 2)]

    补题 Codeforces Round #648 (Div. 2)

    总结一些这一套题目:

    这一套题目没什么算法,ABCDEF都是思维+一点点的构造
    基本上都需要你仔细观察大胆猜测然后求解
    1 看清楚题目
    2 多对样例进行比划
    3 一步一步的思考,对于E要去想每多一个值会产生什么变化,或者说已经有k个数,如何让这个价值变大
    

    A. Matrix Game

    B. Trouble Sort

    C. Rotation Matching

    这个C想了一会,最后对着样例比划的时候,发现其实就是相对位置,只要判断b和a的相对位置即可,相对位置相同的则经过转动都可以进行匹配,不同的则需要不同的转动数量。

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #define id first
    #define val second
    #define inf 0x3f3f3f3f
    #define inf64 0x3f3f3f3f3f3f3f3f
    #define debug(x) printf("debug:%s=%d
    ",#x,x);
    //#define debug(x) cout << #x << ": " << x << endl
    using namespace std;
    typedef long long ll;
    const int maxn=2e5+10;
    int a[maxn],b[maxn],pos[maxn];
     
    int main(){
        int n,ans=0;
        scanf("%d",&n);
        for (int i = 1; i <= n; ++i) scanf("%d",&a[i]),pos[a[i]]=i;
        for (int i = 1,x; i <=n ; ++i) {
            scanf("%d",&x);
            b[(pos[x]-i+n)%n]++;
            ans=max(ans,b[(pos[x]-i+n)%n]);
        }
        printf("%d
    ",ans);
        return 0;
    }
    

    D. Solve The Maze

    这也是一个思维+构造,想不到。。。

    最后听同学说也不太明白为什么只要把bad person围起来就可以了,然后看了一个这个博客[博客链接:https://blog.csdn.net/jziwjxjd/article/details/106614614] 感觉挺对的,可以更好的理解啦。

    #include <cstdio>
    #include <queue>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #define id first
    #define val second
    #define inf 0x3f3f3f3f
    #define inf64 0x3f3f3f3f3f3f3f3f
    #define debug(x) printf("debug:%s=%d
    ",#x,x);
    //#define debug(x) cout << #x << ": " << x << endl
    using namespace std;
    typedef long long ll;
    const int maxn=55;
    char a[maxn][maxn];
    int n,m;
    struct node{
        int x,y;
        node(int x=0,int y=0):x(x),y(y){}
    };
    queue<node>que;
    bool vis[maxn][maxn];
    int dx[]={1,-1,0,0};
    int dy[]={0,0,1,-1};
    void bfs(){
        while(!que.empty()) que.pop();
        memset(vis,0,sizeof(vis));
        if(a[n][m]!='#') que.push(node(n,m)),vis[n][m]=1;
        while(!que.empty()){
            node u = que.front();que.pop();
            for(int i=0;i<4;i++){
                int tx = u.x+dx[i];
                int ty = u.y+dy[i];
     
                if(tx>n||ty>m||tx<1||ty<1) continue;
                if(vis[tx][ty]) continue;
                if(a[tx][ty]=='#') continue;
     
                vis[tx][ty]=1;
                que.push(node(tx,ty));
            }
        }
    }
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            int flag=0;
            scanf("%d%d",&n,&m);
            for(int i=1;i<=n;i++) scanf("%s",a[i]+1);
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    if(a[i][j]=='B'){
                        for(int k=0;k<4;k++){
    			            int tx = i+dx[k];
    			            int ty = j+dy[k];
    			
    			            if(tx>n||ty>m||tx<1||ty<1) continue;
    			            if(a[tx][ty]=='B') continue;
    			            if(a[tx][ty]=='G') flag = 1;
    			
    			            a[tx][ty]='#';
    			        }
                    }
                }
            }
            bfs();
    //        printf("ss flag = %d
    ",flag);
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    if(a[i][j]=='G'&&!vis[i][j]) flag = 1;
                }
            }
            if(flag) printf("No
    ");
            else printf("Yes
    ");
        }
        return 0;
    }
    

    E. Maximum Subsequence Value 思维

    F. Swaps Again

    这个F还是出乎意料的简单,不是很难,但是要注意观察。

    只要你发现他们每一个数对称位置的数永远都是一样的就可以解题啦。

    #include <cstdio>
    #include <queue>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <bits/stdc++.h>
    #define id first
    #define val second
    #define inf 0x3f3f3f3f
    #define inf64 0x3f3f3f3f3f3f3f3f
    #define debug(x) printf("debug:%s=%d
    ",#x,x);
    //#define debug(x) cout << #x << ": " << x << endl
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    const int maxn=550;
    ll a[maxn],b[maxn],v[maxn];
    int vis[maxn][maxn];
    
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            int n,flag = 0;
            scanf("%d",&n);
            memset(vis,0,sizeof(vis));
            for(int i=1;i<=n;i++) scanf("%lld",&a[i]),v[i]=a[i];
            for(int i=1;i<=n;i++) scanf("%lld",&b[i]);
            sort(v+1,v+1+n);
            int len = unique(v+1,v+1+n)-v-1;
            for(int i=1;i<=n;i++){
                int pos1 = lower_bound(v+1,v+1+len,a[i])-v;
                int pos2 = lower_bound(v+1,v+1+len,b[i])-v;
                if(v[pos2]!=b[i]) flag = 1;
                a[i]=pos1,b[i]=pos2;
            }
            if(n&1) if(a[(n+1)/2]!=b[(n+1)/2]) flag = 1;
            for(int i=1;i<=n/2;i++){
                vis[a[i]][a[n-i+1]]++;
                vis[a[n-i+1]][a[i]]++;
            }
            for(int i=1;i<=n/2;i++){
                if(vis[b[i]][b[n-i+1]]||vis[b[n-i+1]][b[i]]){
                    vis[b[i]][b[n-i+1]]--;
                    vis[b[n-i+1]][b[i]]--;
                }
                else flag = 1;
            }
            if(flag) printf("No
    ");
            else printf("Yes
    ");
        }
        return 0;
    }
    
    
  • 相关阅读:
    Windows10用fiddler抓包Android应用(解决手机设置代理后无法上网,设置只抓app包)
    go语言数据库操作,xorm框架
    go语言数据库操作, gorm框架
    python 多线程 及多线程通信,互斥锁,线程池
    Selenium PageFactory
    VBScript学习笔记
    4种手机自动化测试框架介绍
    Behave + Selenium(Python) ------ (第四篇)
    Behave + Selenium(Python) ------ (第三篇)
    Behave + Selenium(Python) ------ (第二篇)
  • 原文地址:https://www.cnblogs.com/EchoZQN/p/13272606.html
Copyright © 2011-2022 走看看