zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 83 (Rated for Div. 2)

    A m%n==0

    B 排序倒数输出

    C

    题意:

    给n,k,有长度为n的数组,由k的次方组成,原本都是0,可以选择加k的次方,或者不加,但只能加一次。

    如果有重复加k的次方的存在输出NO,反之输出YES

    思路:

    只要比较在k进制中,数组没有重复出现k进制相同位置上的就是yes

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define il inline
    #define it register int
    #define inf 0x3f3f3f3f
    #define lowbit(x) (x)&(-x)
    #define pii pair<int,int>
    #define mak(n,m) make_pair(n,m)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mod 998244353
    const ll maxn=3e17+10;
    ll a[50],b[50];
    int n,m,t,vis[50];
    ll k;
    int main(){
        scanf("%d",&t);
        while(t--){
            scanf("%d%lld",&n,&k);
            int sum=0;
            for(it i=0;i<n;i++){
                scanf("%lld",&a[i]);
                if(a[i]!=0){sum=1;}
            }
            if(sum==0){
                 printf("YES
    ");continue;
            }
            int f=1;ll z=1,xx=1;
            for(it i=1;z<maxn;i++){
                z*=k;//cout<<z<<endl;
                int shen=0;
                for(it i=0;i<n;i++){
                    ll zz=a[i];
                    zz%=z;
                    zz/=xx;shen+=zz;
                }
                xx=z;//cout<<shen<<endl;
                if(shen>1){
                    printf("NO
    ");f=0;break;
                }
            }
            if(f){
                printf("YES
    ");
            }
        }
        return 0;
    }

    D

    题意:

    给n,m,n代表时长度为n的数组,构造一个长度为n,值的范围1~m的数组,满足下面条件

    1.数组中只能且必须出现一对相同的数字

    2.先递增再递减

    思路:

    构造一个n-1的递增区间,从m个数取n-1个,因为比较大,需要乘法逆元。

    取完n-1个数后,确定一个值是重复的,这里举个9 8的例子

    1 2 3 4 5 6 7 8,确定4为重复的

    1 2 3 4 5 6 7 8 7 6 5 4 3 2 1

    所以123567这六个位子,可以选前面,或者选后面,所以有2^(n-3)种情况

    这里的选4的情况可以有1234567这7个数字,(n-2)种情况

    所以答案是C(m,n-1)*(n-2)*(2^(n-3))

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define il inline
    #define it register int
    #define inf 0x3f3f3f3f
    #define lowbit(x) (x)&(-x)
    #define pii pair<int,int>
    #define mak(n,m) make_pair(n,m)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define mod 998244353
    const ll maxn=2e5+10;
    ll n,m,t;
    ll ksm(ll a,ll b)
    {
        if(b<0)
            return 0;
        ll ans=1;
        while(b)
        {
            if(b&1)
                ans=ans*a%mod;
            a=a*a%mod;
            b>>=1;
        }
        return ans;
    }
    ll exgcd(ll a,ll b,ll &x,ll &y){
        if(!b){
            x=1;y=0;
            return a;
        }
        ll d=exgcd(b,a%b,x,y);
        ll tmp=x;
        x=y;
        y=tmp-a/b*y;
        return d;
    }
    ll inv(ll a,ll m){
        ll x,y;
        ll d=exgcd(a,m,x,y);
        if(d==1){
            return (x%m+m)%m;
        }
        return -1;
    }
    int main(){
        scanf("%lld%lld",&n,&m);
        ll nn=n-1;
        ll sum=0;
        ll a=1,b=1;int f=1;
        for(ll i=m;i>=m-nn+1 ;i--){
            a*=i;a%=mod;
            b*=(m-i+1);b%=mod;
        }
        sum=a*inv(b,mod)%mod;
        //cout<<a<<endl;
        ll k=(n-2)*ksm(2,n-3)%mod;//cout<<k<<endl;
        sum*=k;
        sum%=mod;
        printf("%lld
    ",sum);
        return 0;
    }

    E

    题意:

    长度为n的数组,其中相邻的两个相等的值可以转换成一个值+1的数字,问数组可以最小化

    3 2 2 -> 3 3 -> 4

    思路:

    。。。

  • 相关阅读:
    真正VC++.net笔记1系统时间的获取
    真正VC++.net笔记5MessageBox变MessageBoxA?
    Judge Online 系统流程设计
    杂谈1:事情因每个人的参与而不同
    ESX/ESXi 4.1 Update 1 or later 同步NTP
    iSCSI CHAP认证
    JSTL中c:set标签的要点和技巧
    JSTL 判断对象是否为空
    Smartmontools——linux磁盘检测工具
    ECMAScript 对象类型
  • 原文地址:https://www.cnblogs.com/luoyugongxi/p/12453225.html
Copyright © 2011-2022 走看看