Codeforces Round #692 (Div. 2, based on Technocup 2021 Elimination Round 3)

58 篇文章 0 订阅
35 篇文章 1 订阅

A. In-game Chat

题意: 给定一个字符串,如果末尾 的’)'字符 大于剩下的字符的个数。则 yes 反之 no

思路:大水题。

AC代码:

#include <bits/stdc++.h>
#define int long long
#define eps 1e-9
using namespace std;
 
signed main(){
    int t = 1;
    cin>>t;
    while(t--){
        string s;
        int n;cin>>n;
        cin>>s;
        int cnt = 0;
        for(int i = s.size()- 1;i >= 0; i --){
            if(s[i] != ')') break;
            cnt ++;
        }
        if(cnt*2 <= s.size()) cout<<"No"<<endl;
        else cout<<"Yes"<<endl;
    }
}

B. Fair Numbers

题意: 给定一个n。找到一个数x >= n,条件是 x 中的每一个数字(0不算),都可以整除这个数。

思路:暴力。因为所有数字 无非就是 0-9嘛。阶乘也就3,628,80。也就是说,最多枚举这么多次。就可以找到答案。好久没见cf这么纯粹的暴力。

AC代码:

#include <bits/stdc++.h>
#define int long long
#define eps 1e-9
using namespace std;
 
bool check(int n){
    int tmp = n;
    for(int i = 0 ; tmp ; i ++){
        int now = tmp%10;
        tmp /= 10;
        if(now == 0) continue;
        if(n%now) return false;
    }
    return true;
}
 
signed main(){
    int t = 1;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        while(!check(n)) ++ n;
        cout<<n<<endl;
    }
 
}

C. Peaceful Rooks

题意: n*n的棋盘。放了m个車(象棋中的車)。要把他们全放到主对角线上。車每次可以走到同行的任意位置或者同列任意位置。但是他们不能相互攻击。即 不能处在同一行或者同一列。问最少要移动多少次。

思路:有点类似于分巧克力。每个小朋友喜欢两个巧克力。现在n个巧克力分给n个小朋友求多少人可以分到喜欢的巧克力。这道题就是用并查集来维护一个集合。如果想要的两个都被别人分走了。自己就没了。这道题也是一样。把x,y看成是喜欢的巧克力。每个点可以走到这两个位置。 如果这两个位置都已经加入到别的集合中了。那就必须要有人让一个位置出来。然后剩下的先进去。最后那个人再回来,也就是要多走一步。

AC代码:

#include <bits/stdc++.h>
#define int long long
#define eps 1e-9
#define mk make_pair
using namespace std;
const int N = 1e5+7;
int n,m,k,t = 1;
//int a[N];
int par[N];
 
int find_(int x){
    return par[x] == x ? x : par[x] = find_(par[x]);
}
 
signed main(){
    cin>>t;
    while(t--){
        int n;
        cin>>n>>m;
        for(int i = 0 ; i <= n ; i ++)
            par[i] = i;
        int cnt = 0;
        int res = 0;
        for(int i = 0 ; i < m ; i ++){
            int x,y;
            cin>>x>>y;
            if(x == y) continue;
            int fa = find_(x);
            int fb = find_(y);
            if(fa != fb){
                par[fa] = fb;
            }else{
                cnt ++;
            }
            res ++;
        }
        cout<<res+cnt<<endl;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值