zoukankan      html  css  js  c++  java
  • BJOI2018

    大佬:这些题都太水啦,随随便便就AK啦

    我:BJ考的都是些什么神仙题啊???

    D1t1[BJOI2018]二进制

    听说是结论题

    我推了一个结论然后YY了一个线段树做法打了200+弃疗了打了个暴力,最后发现结论有点点问题还好只打了暴力?

    怎么写啊,我不会.

    D1t2[BJOI2018]染色

    听说又是结论题

    我不会呀

    到底有什么结论呀..

    D1t3[BJOI2018]求和

    最后来一道lca裸题送温暖吗,可惜我没领出题人这个情,预处理从2开始,然后GG了.

     1 //Achen
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<vector>
     7 #include<cstdio>
     8 #include<queue>
     9 #include<cmath>
    10 #include<set>
    11 #define For(i,a,b) for(int i=(a);i<=(b);i++)
    12 #define Rep(i,a,b) for(int i=(a);i>=(b);i--)
    13 const int mod=998244353,N=300007;
    14 typedef long long LL; 
    15 typedef double db;
    16 using namespace std;
    17 int n,m;
    18 LL kf[N][51],pr[N][51];
    19 
    20 template<typename T> void read(T &x) {
    21     char ch=getchar(); x=0; T f=1;
    22     while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
    23     if(ch=='-') f=-1,ch=getchar();
    24     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;
    25 }
    26 
    27 int ecnt,fir[N],nxt[N<<1],to[N<<1];
    28 void add(int u,int v) {
    29     nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;
    30     nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u;
    31 }
    32 
    33 int R[N],f[N][20];
    34 void dfs(int x,int fa) {
    35     f[x][0]=fa;
    36     For(i,1,18)    f[x][i]=f[f[x][i-1]][i-1];
    37     for(int i=fir[x];i;i=nxt[i]) if(to[i]!=fa) {
    38         R[to[i]]=R[x]+1;
    39         dfs(to[i],x);
    40     }
    41 }
    42 
    43 int lca(int x,int y) {
    44     if(R[x]<R[y]) swap(x,y);
    45     Rep(i,18,0) if(R[f[x][i]]>=R[y]) 
    46         x=f[x][i];
    47     if(x==y) return x;
    48     Rep(i,18,0) if(f[x][i]!=f[y][i]) 
    49         x=f[x][i],y=f[y][i];
    50     return f[x][0];
    51 }
    52 
    53 //#define DEBUG
    54 int main() {
    55 #ifdef DEBUG
    56     freopen("sum.in","r",stdin);
    57     freopen("sum.out","w",stdout);
    58 #endif
    59     read(n);
    60     For(i,1,n-1) {
    61         int x,y;
    62         read(x); read(y);
    63         add(x,y);
    64     }
    65     dfs(1,0);
    66     For(i,1,n) kf[i][0]=1;
    67     For(i,1,n) For(j,1,50) {
    68         kf[i][j]=kf[i][j-1]*i%mod;
    69         pr[i][j]=(pr[i-1][j]+kf[i][j])%mod;
    70     }
    71     read(m);
    72     For(i,1,m) {
    73         int x,y,k;
    74         read(x); read(y); read(k);
    75         int z=lca(x,y),w=z; z=f[z][0];
    76         LL ans=((pr[R[x]][k]+pr[R[y]][k])%mod-2LL*pr[R[z]][k]%mod+mod)%mod;
    77         ans=(ans-kf[R[w]][k]+mod)%mod;
    78         printf("%lld
    ",ans);
    79     }
    80     return 0;
    81 }
    82 /*
    83 5
    84 1 2
    85 1 3
    86 2 4
    87 2 5
    88 2
    89 1 4 5
    90 5 4 45
    91 */
    View Code

    D2t1[BJOI2018]双人猜数游戏

    真有意思

    可以手玩两个小数据

    我不会呀

    D2t2[BJOI2018]链上二次求和

    这道题难得找得到题解

    但是我不想看

    等sxyA了给我讲

    D2t3[BJOI2018]治疗之雨

    考前一天刚好被llj讲到

    然而我和sxy都因为没有判-1爆成10分

    列出柿子高斯消元

    发现矩阵很有特点,先O(n)地消成1~n-1行的i,i+1有元素,n行的n有元素,再O(n)地消成对角线即可.

    我常数太大,被洛谷卡了

    llj也被洛谷卡了,但是本地过了,老张的机子真快
    sxy用更优秀的写法成功bzoj 和luogu都是rank1,但是感觉本质是一样的,这也算常数优化吗?总之Orz orz

      1 //Achen
      2 #include<algorithm>
      3 #include<iostream>
      4 #include<cstring>
      5 #include<cstdlib>
      6 #include<vector>
      7 #include<cstdio>
      8 #include<queue>
      9 #include<cmath>
     10 #include<set>
     11 #define For(i,a,b) for(register int i=(a);i<=(b);i++)
     12 #define Rep(i,a,b) for(register int i=(a);i>=(b);i--)
     13 const int mod=1000000007;
     14 typedef long long LL; 
     15 typedef double db;
     16 using namespace std;
     17 LL T,n,p,m,k;
     18 LL p1,p2,C[1555],inv[1555],power1[1555],power2[1555];
     19 
     20 template<typename T> void read(T &x) {
     21     char ch=getchar(); x=0; T f=1;
     22     while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
     23     if(ch=='-') f=-1,ch=getchar();
     24     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;
     25 }
     26 
     27 inline LL ksm(LL a,LL b) {
     28     LL rs=1,bs=a;
     29     while(b) {
     30         if(b&1) rs=rs*bs%mod;
     31         bs=bs*bs%mod;
     32         b>>=1;
     33     }
     34     return rs;
     35 }
     36 
     37 void mo(LL &x) { if(x>=mod) x-=mod; }
     38 
     39 LL g[1555][1555];
     40 inline int solve(int n) {
     41     For(i,1,n) {
     42         LL tp=ksm(g[i][i],mod-2);
     43         if(g[i][i]==0) return -1;
     44         LL A=g[i][n+1]*tp%mod;
     45         LL B=(mod-g[i][i+1])*tp%mod;
     46         For(j,i+1,n) {
     47             mo(g[j][i+1]+=B*g[j][i]%mod);
     48             mo(g[j][n+1]+=(mod-A*g[j][i]%mod));
     49             g[j][i]=0;
     50         }
     51     }
     52     Rep(i,n,1) {
     53         For(j,i+1,n) {
     54             mo(g[i][n+1]+=(mod-g[j][n+1]*g[i][j]%mod));
     55         }
     56         (g[i][n+1]*=ksm(g[i][i],mod-2))%=mod;
     57     }
     58     return 1;
     59 }
     60 
     61 //#define DEBUG
     62 int main() {
     63 #ifdef DEBUG
     64     freopen("heal1.in","r",stdin);
     65     //freopen("heal.out","w",stdout);
     66 #endif
     67     read(T);
     68     while(T--) {
     69         read(n); read(p); read(m); read(k);
     70         C[0]=1; C[1]=k; inv[0]=inv[1]=1;
     71         p1=ksm(m+1,mod-2); p2=p1*m%mod;
     72         power1[0]=power2[0]=1;
     73         power1[1]=p1; power2[1]=p2;
     74         For(i,2,n+1) {
     75             inv[i]=mod-mod/i*inv[mod%i]%mod;
     76             power1[i]=power1[i-1]*p1%mod;
     77             power2[i]=power2[i-1]*p2%mod;    
     78         }
     79         For(i,2,n+1) { 
     80             if(i<=k) C[i]=C[i-1]*max(1LL,(k-i+1))%mod*inv[i]%mod; 
     81             else C[i]=0; 
     82         }
     83         memset(g,0,sizeof(g));
     84         For(i,1,n) {
     85             g[i][i]++;
     86             LL tpp2;
     87             if(i!=n) {
     88                 tpp2=ksm(p2,k-min((int)k,i));
     89                 Rep(j,min((int)k,i),0) {
     90                     LL t=p2*C[j]%mod*power1[j]%mod*tpp2%mod;
     91                     mo(g[i][i-j]+=mod-t); tpp2=tpp2*p2%mod;
     92                 }
     93                 tpp2=ksm(p2,k-min((int)k-1,i)-1);
     94                 Rep(j,min((int)k-1,i),-1) {
     95                     LL t=p1*C[j+1]%mod*power1[j+1]%mod*tpp2%mod;
     96                     mo(g[i][i-j]+=mod-t); tpp2=tpp2*p2%mod;
     97                 }
     98             }
     99             else {
    100                 LL tpp2=ksm(p2,k-min((int)k,i));
    101                 Rep(j,min((int)k,i),0) {
    102                     LL t=C[j]*power1[j]%mod*tpp2%mod;
    103                     mo(g[i][i-j]+=mod-t); tpp2=tpp2*p2%mod;
    104                 }
    105             }
    106             g[i][n+1]=1;
    107         }
    108         int tp=solve(n);
    109         if(tp==-1) puts("-1");
    110         else printf("%lld
    ",g[p][n+1]);
    111     }
    112     //cerr<<clock()<<endl;
    113     return 0;
    114 }
    115 /*
    116 2
    117 2 1 1 1
    118 2 2 1 1
    119 
    120 2
    121 20 15 54 100
    122 512 112 255 55665 
    123 */
    View Code
  • 相关阅读:
    Android开发之适配器-ListView适配器的重复数据
    Android开发之TextView的下划线添加
    Android 自定义View修炼-Android开发之自定义View开发及实例详解
    Android 开发之自定义Dialog及UI的实现
    Android开发之ContentProvider(内容提供者)
    XC文件管理器(Android应用)
    高效 告别996,开启java高效编程之门 4-1普通码农与风骚码农资源关闭PK
    高效 告别996,开启java高效编程之门 4-2垃圾回收与物理资源释放
    高效 告别996,开启java高效编程之门 3-29实战案例五:排序
    高效 告别996,开启java高效编程之门 3-28实战案例四:分组
  • 原文地址:https://www.cnblogs.com/Achenchen/p/8922004.html
Copyright © 2011-2022 走看看