• 【ContestHunter】【弱省胡策】【Round5】


    反演+FFT+构造+DP


      写了这么多tag,其实我一个也不会

    A

      第一题是反演……数据范围10W,看着就有种要用FFT等神奇算法的感觉……然而蒟蒻并不会推公式,只好写了20+10分的暴力,然而特判30分的时候好像挂了,所以并没有拿到……20分滚粗了

      最近打暴力搞部分分的时候,写各种情况的判断条件什么的总是出问题……sad……以后还是自己造下数据判一下能不能过吧,不能总是靠人品啊>_>

      我还是放弃FFT吧,反正……出来这种题,我也想不到要用FFT & 不会推公式……呵呵哒

     1 //Round5 A
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<iostream>
     6 #include<algorithm>
     7 #define rep(i,n) for(int i=0;i<n;++i)
     8 #define F(i,j,n) for(int i=j;i<=n;++i)
     9 #define D(i,j,n) for(int i=j;i>=n;--i)
    10 #define pb push_back
    11 using namespace std;
    12 typedef long long LL;
    13 inline int getint(){
    14     int r=1,v=0; char ch=getchar();
    15     for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-1;
    16     for(; isdigit(ch);ch=getchar()) v=v*10-'0'+ch;
    17     return r*v;
    18 }
    19 const int N=100010,P=998244353;
    20 /*******************template********************/
    21 
    22 LL n,b[N],a[N];
    23 LL fac[N],inv[N];
    24 LL Pow(LL a,int b){
    25     LL r=1;
    26     for(;b;b>>=1,a=a*a%P) if (b&1) r=r*a%P;
    27     return r;
    28 }
    29 
    30 LL C(int n,int m){
    31     return fac[n]*inv[m]%P*inv[n-m]%P;
    32 }
    33 int main(){
    34 #ifndef ONLINE_JUDGE
    35     freopen("A.in","r",stdin);
    36     freopen("A.out","w",stdout);
    37 #endif
    38     n=getint();
    39     if (n>1000){
    40         F(i,0,n) printf("1 "); puts(""); return 0;
    41     }
    42     fac[0]=fac[1]=1; F(i,2,n) fac[i]=fac[i-1]*i%P;
    43     inv[n]=Pow(fac[n],P-2); inv[0]=1;
    44     D(i,n-1,1) inv[i]=inv[i+1]*(i+1)%P;
    45 
    46     F(i,0,n) b[i]=getint();
    47     bool sign=1;
    48     F(i,0,n) if (b[i]!=C(n+1,i+1)){sign=0; break;}
    49     if (sign){F(i,0,n) printf("1 "); puts(""); return 0;}
    50     D(i,n,0){
    51         F(j,i+1,n) b[i]=((b[i]-C(j,i)*a[j]%P)+P)%P;
    52         a[i]=b[i];
    53     }
    54     F(i,0,n) printf("%lld ",b[i]); puts("");
    55     return 0;
    56 }
    View Code

    B

      qmqmqm神犇出的构造题,随便yy一下就可以联想到邻接矩阵,然后k次方后,a[i][j]就是从 i 开始走k步能否走到j。

      然而我傻逼地没有特判k=1的情况

      事实是:我在想到正解之前看到k=1的点发现这应该直接输出全1矩阵,再小一点的数据可以暴力枚举初始矩阵,然而……后来就没再像这种边界情况,真是作死。95分滚粗了

     1 //Round5 B
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<iostream>
     6 #include<algorithm>
     7 #define rep(i,n) for(int i=0;i<n;++i)
     8 #define F(i,j,n) for(int i=j;i<=n;++i)
     9 #define D(i,j,n) for(int i=j;i>=n;--i)
    10 #define pb push_back
    11 using namespace std;
    12 typedef long long LL;
    13 inline int getint(){
    14     int r=1,v=0; char ch=getchar();
    15     for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-1;
    16     for(; isdigit(ch);ch=getchar()) v=v*10-'0'+ch;
    17     return r*v;
    18 }
    19 const int N=310;
    20 /*******************template********************/
    21 
    22 int n,k;
    23 struct Matrix{
    24     bool c[N][N];
    25     bool* operator [] (int x){return c[x];}
    26     Matrix(){memset(c,0,sizeof c);}
    27     void print(){
    28 //        F(i,1,n){F(j,1,n) printf("%d ",c[i][j]); puts("");}
    29         F(i,1,n){
    30             F(j,1,n) printf("%c",c[i][j]+'0');
    31             puts("");
    32         }
    33         puts("");
    34     }
    35 }f;
    36 
    37 Matrix operator * (Matrix a,Matrix b){
    38     Matrix c;
    39     F(i,1,n) F(k,1,n) F(j,1,n)
    40         c[i][j]+=a[i][k]*b[k][j];
    41     return c;
    42 }
    43 Matrix Pow(Matrix a,int b){
    44     Matrix c;
    45     F(i,1,n) c[i][i]=1;
    46     for(;b;b>>=1,a=a*a) if (b&1) c=c*a;
    47     return c;
    48 }
    49 int main(){
    50 #ifndef ONLINE_JUDGE
    51     freopen("B.in","r",stdin);
    52     freopen("B.out","w",stdout);
    53 #endif
    54     n=getint(); k=getint();
    55     if (k==1){
    56         F(i,1,n){F(j,1,n) printf("%c",'1'); puts("");}
    57         return 0;
    58     }
    59     F(i,1,n) f[i][i]=1;
    60 
    61     F(i,1,k-1) f[i][i+1]=1;
    62     f[k][1]=1;
    63 
    64     F(i,k+1,n) f[i][1]=f[1][i]=1;
    65     F(i,1,n){
    66         F(j,1,n) printf("%c",f[i][j]+'0');
    67         puts("");
    68     }
    69 /*    F(i,0,k){
    70         printf("No. %d
    ",i);
    71         Pow(f,i).print();
    72     }*/
    73     return 0;
    74 }
    View Code

    C

      对我来说神一样的DP,然而并不能找到一种合理的状态表示方式,所以也就搞不出来了……快速幂10分滚粗

     1 //Round5 C
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<iostream>
     6 #include<algorithm>
     7 #define rep(i,n) for(int i=0;i<n;++i)
     8 #define F(i,j,n) for(int i=j;i<=n;++i)
     9 #define D(i,j,n) for(int i=j;i>=n;--i)
    10 #define pb push_back
    11 using namespace std;
    12 typedef long long LL;
    13 inline int getint(){
    14     int r=1,v=0; char ch=getchar();
    15     for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-1;
    16     for(; isdigit(ch);ch=getchar()) v=v*10-'0'+ch;
    17     return r*v;
    18 }
    19 const int N=110,P=1e9+7;
    20 /*******************template********************/
    21 
    22 int n,m,k;
    23 LL f[N][N],fac[N],inv[N];
    24 LL Pow(LL a,int b){
    25     LL r=1;
    26     for(;b;b>>=1,a=a*a%P) if (b&1) r=r*a%P;
    27     return r;
    28 }
    29 LL C(int n,int m){return fac[n]*inv[m]*inv[n-m]%P;}
    30 
    31 int main(){
    32 #ifndef ONLINE_JUDGE
    33     freopen("C.in","r",stdin);
    34     freopen("C.out","w",stdout);
    35 #endif
    36     n=getint(); m=getint(); k=getint();
    37     fac[0]=fac[1]=1;
    38     F(i,2,k) fac[i]=fac[i-1]*i%P;
    39     inv[k]=Pow(fac[k],P-2); inv[0]=1;
    40     D(i,k,2) inv[i-1]=inv[i]*i%P;
    41 
    42     if (n==1){printf("%lld
    ",Pow(k,m)); return 0;}
    43     else{
    44     }
    45     return 0;
    46 }
    View Code

      下午去考了信息会考,然后就回来改题……然而什么也不会,心情好糟糕,什么也不想做……整个人都不好了……

      o(︶︿︶)o 唉还有35?还是34?天就要NOI了……我还是这么傻逼,没救了,是不是退OI保平安比较好……

  • 相关阅读:
    HTML技巧: 语义化你的代码
    css sprite
    Redis主从复制原理
    idea修改快捷键
    Ubuntu14.20 安装docker,创建centos6.7容器,并访问centos容器
    [转]SQL 中 with as 的用法
    ftp与sftp及sftp和scp的区别
    Linux top 命令
    Linux free 命令
    ubuntu 源方式 安装jdk
  • 原文地址:https://www.cnblogs.com/Tunix/p/4569725.html
Copyright © 2020-2023  润新知