Codeforces Round 928 (Div. 4)

Codeforces Round 928 (Div. 4)

比赛链接

A. Vlad and the Best of Five

思路

就是统计字符A和字符B的个数,将个数多的那个输出出来

Code

#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()

#define int long long

void solve(){
    string s;
    cin>>s;
    int ans1=0,ans2=0;
    for(int i=0;i<s.size();i++){
        if(s[i]=='A'){
            ans1++;
        }
        else{
            ans2++;
        }
    }
    cout<<(ans1>ans2?'A':'B');
    cout<<'\n';

    
}

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr), std::cout.tie(nullptr);

    int T = 1;
    std::cin >> T;
    while (T--) solve();

    return 0;

}

B. Vlad and Shapes

思路

就是判断数字1组成的是正方形还是三角形,由于他要求组成的三角形的的特殊性,这里我是比较了一下围成的图形的底和高,如果相等就是正方形,如果不等那就是三角形,但是如果不限制形状是不可以这样做的

Code

#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()

#define int long long

void solve(){
    int n; cin>>n;
    std::vector<string> a(n);
    for(int i=0;i<n;i++) cin>>a[i];
    int hmin=100,hmax=-1;
    int dmin=100,dmax=-1;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(a[i][j]=='1'){
                hmin=min(hmin,i);
                hmax=max(hmax,i);
                dmin=min(dmin,j);
                dmax=max(dmax,j);
            }
        }
    }
    if((dmax-dmin)==(hmax-hmin)){
        cout<<"SQUARE"<<endl;

    }
    else{
        cout<<"TRIANGLE"<<endl;
        return ;
        
    }
}

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr), std::cout.tie(nullptr);

    int T = 1;
    std::cin >> T;
    while (T--) solve();

    return 0;

}

C. Vlad and a Sum of Sum of Digits

思路:

这个题就是预处理一下数字,因为本题的限制是0.5s,所以我们不能每次都去找数字,只能一次性做好,再用O(1)的时间去查询,但是我一开始预处理时候用的字符串方式也超时了,这里我把字符串代码也粘贴出来,希望大家给出意见

Code

//TLE
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()
const int N=2e5+10;
int a[N];
#define int long long
void init(){
    int l=1;

    for(int i=1;i<=N;i++){
        a[i]=a[i-1];

        string s=to_string(l);
        for(int j=0;j<s.size();j++){
            a[i]+=(s[j]-'0');

        }
        l++;

    }
}
void solve(){
    int n;
    cin>>n;
    cout<<a[n]<<endl;
    

}

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr), std::cout.tie(nullptr);
    init();

    int T = 1;
    std::cin >> T;
    while (T--) solve();

    return 0;

}

//AC
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()
const int N=2e5+10;
int a[N];
#define int long long
void init(){
    for(int i = 1; i <= 200000; i ++){
        int x = i;
        while(x){
            a[i] += x % 10;
            x /= 10;
        }
    }
    for(int i = 1; i <= 200000; i ++){
        a[i] += a[i - 1];
    }
}
void solve(){
    int n;
    cin>>n;
    cout<<a[n]<<endl;
    

}

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr), std::cout.tie(nullptr);
    init();

    int T = 1;
    std::cin >> T;
    while (T--) solve();

    return 0;

}

E. Vlad and an Odd Ordering

思路

因为每次都是执行完当前的(n+1)/2张牌,并且都是数字都是有一定规律的,所以可以模拟一下就行

Code

#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin()+1,x.end()

#define int long long

void solve(){
    int n,k; cin>>n>>k;
    int ans=0;
    int x=1;
    int now=(n+1)/2;
    while(now<k){
        k-=now;
        n/=2;
        x*=2;

        now=(n+1)/2;
    }
    // int val=2*k-1;
    ans=x*(2*k-1);
    cout<<ans<<endl;
    /**/

}

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr), std::cout.tie(nullptr);

    int T = 1;
    std::cin >> T;
    while (T--) solve();

    return 0;
}
posted @ 2024-02-20 20:05  du463  阅读(62)  评论(0编辑  收藏  举报