zoukankan      html  css  js  c++  java
  • [CF]Codeforces Round #546 (Div. 2)

    solved 3

    A(签到)

    题意:

    签到

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,n) for(int i=1;i<=n;i++)
    #define pb push_back
    #define mp make_pair
    #define LL long long
    #define nd second
    #define st first
    
    #define pii pair<int , int> 
    
    const int N = 2e2+7;
    
    int n;
    
    pii a[N];
    
    int main(){
        cin>>n;
        rep(i,n){
            int l,r;
            cin>>l>>r;
            a[i]=mp(l,r);
        }
        int x;
        cin>>x;
        rep(i,n){
            if(a[i].nd>=x){
                cout<<n-i+1;
                return 0;
            } 
        }
    } 
    View Code

    B(思维)

    题意:

    有线性排列的n个洞,开始时每个洞口有一块石头,每个洞口里有一个金币,当洞口没有石头时可以取出金币,开始时在第k个洞口。

    1取出金币 2把当前洞口的一块石头扔到其他任意一个洞口 3移动一步 都视为一次操作。

    求取出所有金币最少的操作数。

    显然取完第一个洞口之后,所有的石头就可以扔到第一个洞口上,因此只需要移n+1块石头,取金币要n次操作,移动只需要遍历一遍所有洞口,根据初始位置可以直接算出。

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,n) for(int i=1;i<=n;i++)
    #define pb push_back
    #define mp make_pair
    #define LL long long
    #define nd second
    #define st first
    
    #define pii pair<int , int> 
    
    const int N = 2e2+7;
    
    int n,k;
    
    int main(){
        cin>>n>>k;
        int ans=n*2+1;
        ans+=min(n-1+k-1,n-k+n-1) ;
        
        cout<<ans; 
    } 
    View Code

    C(思维)

    题意:

    给出矩阵A,B,可以无限次地转置任意一个A的子方阵,问A是否可以变换为B。

    观察知方阵的转置等价于若干次交换副对角线上相邻的两个数,即左下和右上交换,也就是每条副对角线上的元素都是可以任意交换的,因此只需要判断A和B的每一条副对角线上是否含有完全相同的数即可。

     #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,n) for(int i=1;i<=n;i++)
    #define pb push_back
    #define mp make_pair
    #define LL long long
    #define nd second
    #define st first
    
    #define pii pair<int , int> 
    
    const int N = 2e4+7;
    
    vector<int> a[N];
    vector<int> b[N];
    
    int main(){
        int n,m;
        cin>>n>>m;
        rep(i,n)
        rep(j,m){
            int x;
            cin>>x;
            a[i+j].pb(x);
        }
        
        rep(i,n)
        rep(j,m){
            int x;
            cin>>x;
            b[i+j].pb(x);
        }
        
        for(int i=2;i<=n+m;i++){
            sort(a[i].begin(),a[i].end());
            sort(b[i].begin(),b[i].end());
            for(int j=0;j<a[i].size();j++)if(a[i][j]!=b[i][j]){
                cout<<"NO";
                return 0;
            }
        }
        cout<<"YES";
        
    } 
    View Code
  • 相关阅读:
    从一个表中查数据,插入另一个表
    sql 字段字符串内容替换
    安装VS2010后,如何设置老版本的项目文件不是默认用VS2010打开
    题解 [JOI 2019 Final] 独特的城市
    题解 [JOI 2019 Final] 硬币收藏
    题解 [CF720A] Closing ceremony
    [学习笔记] Miller-Rabin 质数测试
    题解 [CF332C] Students' Revenge
    题解 [CF525D] Arthur and Walls
    SpringMVC-拦截器
  • 原文地址:https://www.cnblogs.com/xutianshu/p/10519165.html
Copyright © 2011-2022 走看看