zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 83 (Rated for Div. 2)【ABCDEF】(题解)

    目录

    涵盖知识点:思维、dp。

    比赛链接:传送门

    A - Two Regular Polygons

    题意: 问你正n边形里能不能套正m边形。
    题解: 判断n是不是m倍数即可。
    Accept Code:

    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
        int t;
        cin>>t;
        while(t--){
            int n,m;
            cin>>n>>m;
            if(n%m==0)puts("YES");
            else puts("NO");
        }
        return 0;
    }
    

    B - Bogosort

    题意: 重排数组使得不存在一对数满足两者值之差等于下标之差。
    题解: 从大到小排序即可,证明随便脑补一下。
    Accept Code:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=110;
    int a[maxn];
    int main(){
        int t;
        cin>>t;
        while(t--){
            int n;
            cin>>n;
            for(int i=1;i<=n;i++)
                cin>>a[i];
            sort(a+1,a+1+n,greater<int>());
            for(int i=1;i<=n;i++){
                cout<<a[i]<<" ";
            }
            cout<<"
    ";
        }
        return 0;
    }
    

    C - Adding Powers

    题意: 给定(n,k)和一个全为0的数组,从0开始计数的第(i)次操作可以使数组中任意一个数字加(k^i),问是否可以构造出要求的新数组。
    题解: 枚举要求数组中的所有数字看是否有重复的(i)被用到即可。
    Accept Code:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn=110;
    ll a[maxn];
    set<int> pos;
    int n,k;
    bool check(){
        pos.clear();
        for(int i=1;i<=n;i++){
            ll x=a[i];
            int d=0;
            while(x){
                if(x%k&&x%k!=1)return false;
                if(x%k==1){
                    if(pos.count(d))return false;
                    pos.insert(d);
                }
                d++;
                x/=k;
            }
        }
        return true;
    }
    int main(){
        int t;
        cin>>t;
        while(t--){
            cin>>n>>k;
            for(int i=1;i<=n;i++)
                cin>>a[i];
            puts(check()?"YES":"NO");
        }
        return 0;
    }
    

    D - Count the Arrays

    题意: 给定(n,m),问长度为(n),元素限制在([1,m])且必须有且仅有两个元素相同的严格单峰序列能构造出多少个。
    题解: 首先在(m)个数种选(n-1)个,最大的数为峰,剩下(n-2)个数字中随便选一个作为相同的那个数字,共(n)个数除掉峰值和相等数对剩下(n-3)个数,可在左右任意排列。所以(ans=C_m^{n-1}(n-2)2^{n-3})
    Accept Code:

    #include <bits/stdc++.h>
    using namespace std;
    const int mod=998244353,maxn=2e5+10;
    typedef long long ll;
    ll qpow(ll a,ll b){
        int res=1;
        while(b){
            if(b&1)res=res*a%mod;
            a=a*a%mod;
            b>>=1;
        }
        return res;
    }
    ll fac[maxn];
    void init(){
        fac[0]=1;
        for(int i=1;i<maxn;i++){
            fac[i]=fac[i-1]*i%mod;
        }
    }
    ll c(ll x,ll y){
        return fac[x]*qpow(fac[y]*fac[x-y]%mod,mod-2)%mod;
    }
    int main(){
        init();
        int n,m;
        cin>>n>>m;
        if(n==2){
            puts("0");
            return 0;
        }
        cout<<((c(m,n-1)*qpow(2,n-3))%mod*1ll*(n-2))%mod<<"
    ";
        return 0;
    }
    

    E - Array Shrinking

    题意: 两个相邻的相同数字可合并为一个大1的数字,问最后能合并成的数组的最小长度。
    题解: (dp_{i,j})描述区间([i,j])所能达到的最大数字,处理完以后再扫描一遍区间得出答案。
    Accept Code:

    #include<bits/stdc++.h>
    using namespace std;
    const int inf=0x3f3f3f3f,maxn=510;
    int a[maxn],ans[maxn],dp[maxn][maxn];
    int main(){
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        for(int i=1;i<=n;i++)
            dp[i][i]=a[i];
        for(int i=n-1;i>=1;i--){
            for(int j=i+1;j<=n;j++){
                for(int k=i;k<j;k++) {
                    if (dp[i][k] && dp[k + 1][j] && dp[i][k] == dp[k + 1][j])
                        dp[i][j] = dp[i][k] + 1;
                }
            }
        }
        memset(ans,inf,sizeof ans);
        ans[0]=0;
        for(int i=1;i<=n;i++){
            for(int j=0;j<i;j++)
                if(dp[j+1][i])
                    ans[i]=min(ans[i],ans[j]+1);
        }
        cout<<ans[n]<<"
    ";
    }
    

    F - Attack on Red Kingdom

    G - Autocompletion

  • 相关阅读:
    pip install pli 提示:Could not find a version that satisfies the requirement PIL
    关于selenium部分元素定位不到的解决办法
    ERROR 1054 (42S22): Unknown column ‘password‘ in ‘field list‘
    通过Tomcat jpress连接不到数据库
    Navicat MySQL 连接出现 Authentication plugin ‘caching_sha2_password‘ cannot be loaded
    Selenium中核心属性以及方法
    selenium中定位frame中的元素
    selenium中截屏以及按照时间格式保存到相应文件夹
    Selenium中核心属性以及方法
    selenium中关于js脚本的一些操作
  • 原文地址:https://www.cnblogs.com/charles1999/p/12455135.html
Copyright © 2011-2022 走看看