• 【CF1262F】Wrong Answer on test 233(数学)


    题意:给定n道题目,每道题目有k个选项,已知所有正确选项,选对1题得1分

    问循环后移一格后总得分s2大于原先总得分s1的方案数

    n<=2e5,1<=k<=1e9

    思路:特判k=1

    easy版本的话写了dp

    dp[i][j]表示前i道题循环后s2比s1高j的方案数,j=【-n,n】,n方dp即可

    hard版本注意到得分的方案是对称的,即s1>s2和s1<s2的方案数相等

    所以问题转化为统计s1=s2的方案数

    设s1正确s2不正确的位置为-1,反之为1,其余为0

    考虑不同的位置有s个

    枚举+1的位置,假设有i个,方案数为C(s,i)

    -1的位置同样有i个,方案数为C(s-i,i)

    其他s-2*i个位置都是0,每个位置上有(k-2)种选择,方案数为(k-2)^(s-2*i)

    剩余相同的位置每个位置上有k种选择,方案数为k^(n-s)

    合法的总方案数有k^n种,总方案数-s1=s2的方案数之后除2即为所求

    easy版本

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 typedef unsigned int uint;
     5 typedef unsigned long long ull;
     6 typedef long double ld;
     7 typedef pair<int,int> PII;
     8 typedef pair<ll,ll> Pll;
     9 typedef vector<int> VI;
    10 typedef vector<PII> VII;
    11 typedef pair<ll,ll>P;
    12 #define N  200000+10
    13 #define M  200000+10
    14 #define INF 1e9
    15 #define fi first
    16 #define se second
    17 #define MP make_pair
    18 #define pb push_back
    19 #define pi acos(-1)
    20 #define mem(a,b) memset(a,b,sizeof(a))
    21 #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
    22 #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
    23 #define lowbit(x) x&(-x)
    24 #define Rand (rand()*(1<<16)+rand())
    25 #define id(x) ((x)<=B?(x):m-n/(x)+1)
    26 #define ls p<<1
    27 #define rs p<<1|1
    28 #define fors(i) for(auto i:e[x]) if(i!=p)
    29  
    30 const int MOD=998244353,inv2=(MOD+1)/2;
    31       //int p=1e4+7;
    32       //double eps=1e-6;
    33       int dx[4]={-1,1,0,0};
    34       int dy[4]={0,0,-1,1};
    35  
    36 ll dp[2010][4100];
    37 int a[N],b[N];
    38  
    39 int read()
    40 {
    41    int v=0,f=1;
    42    char c=getchar();
    43    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
    44    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
    45    return v*f;
    46 }
    47  
    48 ll readll()
    49 {
    50    ll v=0,f=1;
    51    char c=getchar();
    52    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
    53    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
    54    return v*f;
    55 }
    56  
    57 int main()
    58 {
    59     //freopen("1.in","r",stdin);
    60     //freopen("1.out","w",stdout);
    61     int n=read(),k=read();
    62     rep(i,1,n) a[i]=read();
    63     rep(i,1,n) b[i%n+1]=a[i];
    64     if(k==1)
    65     {
    66         printf("0
    ");
    67         return 0;
    68     }
    69     int eps=n;
    70     dp[0][0+eps]=1;
    71  
    72     rep(i,1,n)
    73     {
    74         if(a[i]==b[i])
    75         {
    76             rep(j,-n,n) dp[i][j+eps]=dp[i-1][j+eps]*k%MOD;
    77             continue;
    78         }
    79         rep(j,-n,n) dp[i][j+eps]=(dp[i-1][j-1+eps]+dp[i-1][j+1+eps]+1ll*(k-2)*dp[i-1][j+eps]%MOD)%MOD;
    80     }
    81     ll ans=0;
    82     rep(i,1,n) ans=(ans+dp[n][i+eps])%MOD;
    83     printf("%I64d
    ",ans);
    84     return 0;
    85 }

    hard版本

      1 #include<bits/stdc++.h>
      2 using namespace std;
      3 typedef long long ll;
      4 typedef unsigned int uint;
      5 typedef unsigned long long ull;
      6 typedef long double ld;
      7 typedef pair<int,int> PII;
      8 typedef pair<ll,ll> Pll;
      9 typedef vector<int> VI;
     10 typedef vector<PII> VII;
     11 typedef pair<ll,ll>P;
     12 #define N  200000+10
     13 #define M  200000+10
     14 #define INF 1e9
     15 #define fi first
     16 #define se second
     17 #define MP make_pair
     18 #define pb push_back
     19 #define pi acos(-1)
     20 #define mem(a,b) memset(a,b,sizeof(a))
     21 #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
     22 #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
     23 #define lowbit(x) x&(-x)
     24 #define Rand (rand()*(1<<16)+rand())
     25 #define id(x) ((x)<=B?(x):m-n/(x)+1)
     26 #define ls p<<1
     27 #define rs p<<1|1
     28 #define fors(i) for(auto i:e[x]) if(i!=p)
     29 
     30 const int MOD=998244353,inv2=(MOD+1)/2;
     31       //int p=1e4+7;
     32       //double eps=1e-6;
     33       int dx[4]={-1,1,0,0};
     34       int dy[4]={0,0,-1,1};
     35 
     36 ll fac[N],inv[N];
     37 int a[N],b[N];
     38 
     39 int read()
     40 {
     41    int v=0,f=1;
     42    char c=getchar();
     43    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
     44    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
     45    return v*f;
     46 }
     47 
     48 ll readll()
     49 {
     50    ll v=0,f=1;
     51    char c=getchar();
     52    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
     53    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
     54    return v*f;
     55 }
     56 
     57 ll C(int x,int y)
     58 {
     59     if(y>x) return 0;
     60     return fac[x]*inv[y]%MOD*inv[x-y]%MOD;
     61 }
     62 
     63 ll pw(ll x,ll y)
     64 {
     65     x%=MOD;
     66     ll res=1;
     67     while(y)
     68     {
     69         if(y&1) res=res*x%MOD;
     70         x=x*x%MOD;
     71         y>>=1;
     72     }
     73     return res;
     74 }
     75 
     76 int main()
     77 {
     78     //freopen("1.in","r",stdin);
     79     //freopen("1.out","w",stdout);
     80     int n=read(),k=read();
     81     rep(i,1,n) a[i]=read();
     82     rep(i,1,n) b[i%n+1]=a[i];
     83     if(k==1)
     84     {
     85         printf("0
    ");
     86         return 0;
     87     }
     88     int s=0;
     89     rep(i,1,n)
     90      if(a[i]!=b[i]) s++;
     91     fac[0]=1;
     92     rep(i,1,2e5) fac[i]=fac[i-1]*i%MOD;
     93     inv[0]=inv[1]=1;
     94     rep(i,2,2e5) inv[i]=inv[MOD%i]*(MOD-MOD/i)%MOD;
     95     rep(i,1,2e5) inv[i]=inv[i-1]*inv[i]%MOD;
     96     ll ans=0,sum=0;
     97     rep(i,0,s/2)
     98     {
     99         ll tmp=C(s,i)*C(s-i,i)%MOD*pw(k-2,s-i*2)%MOD*pw(k,n-s)%MOD;
    100         sum=(sum+tmp)%MOD;
    101     }
    102     ans=(pw(k,n)-sum+MOD)*inv2%MOD;
    103     printf("%I64d
    ",ans);
    104     return 0;
    105 }
  • 相关阅读:
    利用Jmeter模拟Github登录
    利用Python模拟GitHub登录
    Linux命令学习-ps命令
    Linux命令学习-tail命令
    Linux命令学习-history命令
    Linux命令学习-wget命令
    Linux命令学习-tar命令
    10.21工作第11天
    10.18工作第十天
    10.17工作第九天
  • 原文地址:https://www.cnblogs.com/myx12345/p/11928906.html
Copyright © 2020-2023  润新知