• 2018HN多校


    http://acm.hi-54.com/contest_problemset.php?cid=1455

     

    A : 摩斯密码

    Progress Bar

    时间限制:1 Sec 内存限制:128 MiB
    提交:202 答案正确:82

    提交

    题目描述

    题目描述:

    摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。为了简单问题,去除所有的标点符号。

    现在给你一段摩斯密码,请你把它们进行解密

    输入

    含有T(T<=20)组数据,每组数据包含一段摩斯密码(由字符 '.' '-' 以及 空格组成,连续空格个数不超过两个),每段占一行(不超过1000字符),现在请你对他们进行解密;

    输出

    输出对应的解密后的结果(所有解密结果如果是英文字母一律输出小写英文字母),保证结果仅包含 数字 空格 字母。

    样例输入

    复制
    5
    ..
    . .
    . ..
    .  ..
    ..  .-.. --- ...- .  -.-- --- ..-
    

    样例输出

    复制
    i
    ee
    ei
    e i
    i love you

        map跑一发,但不知道为啥格式错误最后随便改了改A了。
      
     1 #include<iostream>
     2 #include<cstring>
     3 #include<queue>
     4 #include<cstdio>
     5 #include<stack>
     6 #include<set>
     7 #include<map>
     8 #include<cmath>
     9 #include<ctime>
    10 #include<time.h> 
    11 #include<algorithm>
    12 #include<bits/stdc++.h>
    13 using namespace std;
    14 #define mp make_pair
    15 #define pb push_back
    16 #define debug puts("debug")
    17 #define LL unsigned long long 
    18 #define pii pair<int,int>
    19 #define eps 1e-10
    20 #define inf 0x3f3f3f3f
    21  
    22  
    23 map<string,char>M;
    24 void init(){
    25     M[".-"]='a';M["-..."]='b';M["-.-."]='c';M["-.."]='d';
    26     M["."]='e';M["..-."]='f';M["--."]='g';M["...."]='h';
    27     M[".."]='i';M[".---"]='j';M["-.-"]='k';M[".-.."]='l';
    28     M["--"]='m';M["-."]='n';M["---"]='o';M[".--."]='p';
    29     M["--.-"]='q';M[".-."]='r';M["..."]='s';M["-"]='t';
    30     M["..-"]='u';M["...-"]='v';M[".--"]='w';M["-..-"]='x';
    31     M["-.--"]='y';M["--.."]='z';
    32     M["-----"]='0';M[".----"]='1';M["..---"]='2';M["...--"]='3';
    33     M["....-"]='4';M["....."]='5';M["-...."]='6';M["--..."]='7';
    34     M["---.."]='8';M["----."]='9';
    35 }
    36 char s[1100];
    37 int main()
    38 {
    39     LL n,m,i,j,k,t;
    40     init();
    41     cin>>t;
    42     getchar();
    43     while(t--){
    44         string ans="";
    45         string tmp="";
    46         gets(s);
    47         LL l=strlen(s);
    48         for(i=0;i<l;++i){
    49             if(s[i]==' '){
    50                 ans+=M[tmp];
    51                 tmp="";
    52                 if(s[i+1]==' '){
    53                     i++;
    54                     ans+=' ';
    55                 }
    56             }
    57             else{
    58                 tmp+=s[i];
    59             }
    60         }
    61         ans+=M[tmp];
    62         for(int i=0;i<ans.length();++i){
    63             if(isalpha(ans[i])){
    64                 ans[i]=tolower(ans[i]);
    65             }
    66         }
    67         cout<<ans<<endl;
    68     }
    69     return 0; 
    70 }
    71  

        

    B : 简单环路

    Progress Bar

    时间限制:1 Sec 内存限制:128 MiB
    提交:86 答案正确:18

    提交

    题目描述

    有一个N x M 大小的地图,地图中的每个单元包含一个大写字母。
    若两个相邻的(这里的相邻指“上下左右”相邻)点上的字母相同,我们可以用线段连接这两个点。
    若存在一个包含同一字母的环路,那么连接这些点我们可以得到一个多边形,
    当且仅当多边形的边数大于等于4时,我们称这幅地图中存在“简单环路”。
    现在给你一份地图,你来判断是否存在“简单环路”。
    列如:
    3 4
    AAAA
    ABCA
    AAAA
    字符“A”可以构成一个“简单环路”,其边数为4。

    输入

    第一行输入两个正整数n,m,2<=n,m<=50,分别表示地图的行列数。
    接下来输入n行,每行m个大写字母。

    输出

    若存在“简单环路”输出“Yes”,否则输出“No”。

    样例输入

    复制
    3 4
    AAAA
    ABCA
    AADA
    

    样例输出

    复制
    No
        判断一个图中是否有环,刚开始想的用dfs感觉写起来很麻烦,最后用的并查集,每个格子看作一个点,注意一条边并一次就好,
    发现两个同类点在一个集合中说明有环。
        
     1 #include<iostream>
     2 #include<cstring>
     3 #include<queue>
     4 #include<cstdio>
     5 #include<stack>
     6 #include<set>
     7 #include<map>
     8 #include<cmath>
     9 #include<ctime>
    10 #include<time.h> 
    11 #include<algorithm>
    12 #include<bits/stdc++.h>
    13 using namespace std;
    14 #define mp make_pair
    15 #define pb push_back
    16 #define debug puts("debug")
    17 #define LL unsigned long long 
    18 #define pii pair<int,int>
    19 #define eps 1e-10
    20 #define inf 0x3f3f3f3f
    21 LL MOD=1e9+7;
    22  
    23 char s[110][110];
    24 int e[110][110];
    25  
    26 int f[2600];
    27 int getf(int v){
    28     return f[v]==v?v:f[v]=getf(f[v]);
    29 }
    30     LL t,n,m,i,j,k;
    31 struct Edge{
    32     int u,v,w;
    33 }P[5050];
    34 int gid(int x,int y){
    35     return (x-1)*m+y;
    36 }
    37 int main()
    38 {
    39  
    40     while(cin>>n>>m){
    41         memset(e,0,sizeof(e));
    42         for(i=1;i<=n*m;++i) f[i]=i;
    43         for(i=1;i<=n;++i) cin>>s[i]+1;
    44         bool ok=0;
    45         for(i=1;i<=n;++i){
    46             for(j=1;j<=m;++j){
    47                 if(s[i][j]==s[i][j-1]){
    48                     int u=gid(i,j),v=gid(i,j-1);
    49                     int fu=getf(u),fv=getf(v);
    50                     if(fu!=fv){
    51                         f[fv]=fu;
    52                     }
    53                     else{
    54                         ok=1;
    55                         break;
    56                     }
    57                 }
    58                  if(s[i][j]==s[i-1][j]){
    59                     int u=gid(i,j),v=gid(i-1,j);
    60                     int fu=getf(u),fv=getf(v);
    61                     if(fu!=fv){
    62                         f[fv]=fu;
    63                     }
    64                     else{//cout<<i<<' '<<j<<" "<<fu<<" "<<fv<<endl;
    65                         ok=1;
    66                         break;
    67                     }
    68                 }
    69                 if(ok) break;
    70             }
    71             if(ok) break;
    72         }
    73         ok?puts("Yes"):puts("No");
    74     }
    75     return 0; 
    76 }
    77  
    78 /*
    79 ..  .-.. --- ...- .  -.-- --- ..---
    80 */
    81  

      C直接模拟。

      

    D : Minsum Plus

    Progress Bar

    时间限制:1 Sec 内存限制:128 MiB
    提交:213 答案正确:36

    提交

    题目描述

    题意简单到令人发指!
    序列A由N个整数组成,从中选出一个连续的子序列,使得这个子序列的和为正数,且和为所有和大于零的子序列中的最小值.
    将这个值输出,若无解,输出no solution。

    输入

    第一行输入一个正整数N(2<N<50000)<n<50000)<n<50000)<n<50000)< div="">
    第二行输入N个整数

    输出

    输出最小的正子段和

    样例输入

    复制
    3
    -1 2 3
    

    样例输出

    复制
    1
    

       贪心,考虑一下这段序列的和 sum[i,j]=SUM{a[i]+a[i+1]+...+a[j]},我们的目标是 MIN{sum[i,j]},也可以改写成MIN{pre[j]-pre[i-1]},转化成了前缀和的形式,问题转化为找到两个前缀和pre[a]和pre[b]满足 a<b且pre[a]<pre[b] 的最小的pre[b]-pre[a],对处理好的pre[]数组排序,枚举右边界i,如果i-1满足条件那显然i-1就是当前最优的,如果i-1不满足条件,在i-1前面有满足条件的k,那么让i-1和k配对会使得结果更优,所以我们只考虑相邻的点就可以了。

      

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 #define LL long long 
     7 pair<LL,int>sum[50010];
     8 int a[50010];
     9 int main()
    10 {
    11     int n,i,j;
    12     cin>>n;
    13     LL ans=9999999999;
    14     for(i=1;i<=n;i++) cin>>a[i];
    15     for(i=1;i<=n;i++) {
    16         sum[i].first=sum[i-1].first+a[i];
    17         sum[i].second=i;
    18     }
    19     sort(sum+1,sum+1+n);
    20     if(sum[1].first>0)ans=sum[1].first;
    21     for(i=2;i<=n;i++) {
    22         if(sum[i].first>0) ans=min(ans,sum[i].first);
    23         if(sum[i].second>sum[i-1].second && sum[i].first!=sum[i-1].first) ans=min(ans,sum[i].first-sum[i-1].first);
    24     }
    25     if(ans!=9999999999) cout<<ans<<endl;
    26     else puts("no solution");
    27     return 0;
    28 }
    
    

    E : 毁掉这颗二叉树

    Progress Bar

    时间限制:1 Sec 内存限制:128 MiB
    提交:49 答案正确:12

    提交

    题目描述

    广寒宫下有株二叉树,树上共有n个节点,通过n-1条树枝连接,树下有一只玉兔,吴刚提着斧子站在一旁。
    他恼恨一切同他争夺嫦娥的事物,所以他决定通过砍二叉树上的n-1条树枝来毁掉这颗二叉树。
    妙的是,这些树枝只能被砍一次,而且被砍后有一半的概率立即长出。
    吴刚砍了n斧子后罢手了,他打算“不眠倚桂树”。你来猜猜,现在这株二叉树有多少联通块?(即联通块的期望值)
    已知:最后一斧子砍了玉兔。

    输入

    输入一个正整数T(1<=T<=50)
    接下来T行,每行输入一个正整数n,代表二叉树的节点数,2<=n<=1e5。
     

    输出

    输出联通块的期望值,答案的数据可能很大,所以输出答案乘2^(n-1)后再对1e9+7取模

    样例输入

    复制
    1
    2
    

    样例输出

    复制
    3
    

    提示

    来源

      直接根据题意列出来联通快个数分布律图,答案就是 { Σni=1(i*C(n-1,i-1)) }%1e9+7,由于组合数推到用到了除法需要取逆元,这里n不是很大,直接线性推导,inv[i]=(mod-mod/i)*inv[mod%i]%mod;记得中间取模防爆。

      

     1 #include<iostream>
     2 #include<cstring>
     3 #include<queue>
     4 #include<cstdio>
     5 #include<stack>
     6 #include<set>
     7 #include<map>
     8 #include<cmath>
     9 #include<ctime>
    10 #include<time.h> 
    11 #include<algorithm>
    12 #include<bits/stdc++.h>
    13 using namespace std;
    14 #define mp make_pair
    15 #define pb push_back
    16 #define debug puts("debug")
    17 #define LL unsigned long long 
    18 #define pii pair<int,int>
    19 #define eps 1e-10
    20 #define inf 0x3f3f3f3f
    21 LL MOD=1e9+7;
    22 LL inv[100100]={1,1};
    23 int main()
    24 {
    25     LL t,n,m,i,j,k;
    26     for(i=2;i<100000;++i)
    27         inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD;
    28     scanf("%lld",&t);
    29     while(t--){
    30         scanf("%lld",&n);
    31         LL ans=1;
    32         LL r=1;
    33         for(i=1;i<n;++i){
    34             r=r*(n-i)%MOD*inv[i]%MOD;
    35             ans+=(i+1)*r;
    36             ans%=MOD;
    37         }
    38         cout<<ans<<endl;
    39     }
    40     return 0; 
    41 }
    42  

    F : 正约数之和

    Progress Bar

    时间限制:1 Sec 内存限制:128 MiB
    提交:203 答案正确:58

    提交

    题目描述

    我们把f(i)表示为i的正约数的和,而我们要求的是1<=i<=n之间所有i的f(i)之和!

    输入

    先输入一个正整数T,表示T个这是数据。T(T<=50)
    每行输入一个正整数n。(n<10^6)

    输出

    输出一个数字,表示所求的数。

    样例输入

    复制
    3
    5
    12
    2018

    样例输出

    复制
    21
    127
    3350309
        
        1--n中因子x的个数就是floor(n/i);
      
     1 #include<iostream>
     2 #include<cstring>
     3 #include<queue>
     4 #include<cstdio>
     5 #include<stack>
     6 #include<set>
     7 #include<map>
     8 #include<cmath>
     9 #include<ctime>
    10 #include<time.h> 
    11 #include<algorithm>
    12 #include<bits/stdc++.h>
    13 using namespace std;
    14 #define mp make_pair
    15 #define pb push_back
    16 #define debug puts("debug")
    17 #define LL unsigned long long 
    18 #define pii pair<int,int>
    19 #define eps 1e-10
    20 #define inf 0x3f3f3f3f
    21 LL MOD=1e9+7;
    22 
    23 
    24 LL cal(int n){
    25     LL r=n;
    26     for(int i=2;i<=n;++i){
    27         r+=(n/i)*i;
    28     }
    29     return r;
    30 }
    31 int main(){
    32     int n,i,j,k;
    33     cin>>k;
    34     while(k--){
    35         scanf("%d",&n);
    36         printf("%lld
    ",cal(n));
    37     }
    38     return 0;
    39 }

    G : 我只看看不写题

    Progress Bar

    时间限制:1 Sec 内存限制:128 MiB
    提交:111 答案正确:19

    提交

    题目描述

    伴随着科技的发展,我们的生活也越来越多姿多彩,随着手机的普及,各种交友软件也在快速的发展。
    小a是个老实人,当然只是自己理解而已,其实小a是个不折不扣的渣男。因为他在有女朋友的同时,还在疯狂的撒网,利用各种交友软件寻求更适合自己的伴侣。
    小a女朋友当然不是省油的灯,自然了解小a的本性,所以在每次见面时就会翻看小a的软件记录,来了解小a近期的状况,机智的小a当然会在女朋友来之前就给完全清理干净了。
    终于在某次时间紧急的情况下,小a的软件记录并不一定能够完全删除,但是小a知道,自己每个软件记录的火热程度以及最终删除时间(即可以删除的最晚时间,过时将无法删除)。每个软件记录的删除需要一分钟,软件记录的火热程度,正好对应着女朋友的刺激值,小a想知道,在有限的时间内,如何才能够让女朋友的刺激值最小,求出最小值。

    输入

    第一行一个正整数T。表示样例个数(0<T<10)
    每组有两个整数n,m,分别表示一共有n个软件以及女朋友到来的时间(0<n<=10^5,0<m<=10^6)
    往下对应着n行,每行有两个正整数e,f分别对应每个软件记录的火热程度和该软件的最终删除时间。(0<e<=10^5,0<f<=10^6)
    题目中涉及到的时间全部以分钟为单位。

    输出

    	输出对女朋友的最小刺激值;结果占一行。

    样例输入

    复制
    2
    4 2
    20 1
    10 1
    30 2
    40 2
    6 2
    20 1
    10 1
    30 2
    40 2
    50 3
    60 3

    样例输出

    复制
    30
    100

        贪心,考虑每个时间x,在这个时间点能销毁的软件的时间属性必须>=x,大的时间肯定不会影响小时间,倒序往堆里push节点每次pop队首就好了。
      
     1 #include<iostream>
     2 #include<cstring>
     3 #include<queue>
     4 #include<cstdio>
     5 #include<stack>
     6 #include<set>
     7 #include<map>
     8 #include<cmath>
     9 #include<ctime>
    10 #include<time.h> 
    11 #include<algorithm>
    12 #include<bits/stdc++.h>
    13 using namespace std;
    14 #define mp make_pair
    15 #define pb push_back
    16 #define debug puts("debug")
    17 #define LL unsigned long long 
    18 #define pii pair<int,int>
    19 #define eps 1e-10
    20 #define inf 0x3f3f3f3f
    21 LL MOD=1e9+7;
    22  
    23 struct node{
    24     int a,b;
    25     bool operator<(const node& tmp)const{
    26         return a<tmp.a;
    27     }
    28 }P[100010];
    29 bool cmpb(node A,node B){
    30     return A.b>B.b;
    31 }
    32 priority_queue<node>q;
    33 int main()
    34 {
    35     LL t,n,m,i,j,k;
    36     cin>>t;
    37     while(t--){
    38         while(!q.empty()) q.pop();
    39         scanf("%lld%lld",&n,&m);
    40         LL sum=0,ans=0;
    41         for(i=1;i<=n;++i){
    42             scanf("%d%d",&P[i].a,&P[i].b);
    43             sum+=P[i].a;
    44         }
    45         sort(P+1,P+1+n,cmpb);
    46         for(i=m,j=1;i>=1;--i){
    47             while(j<=n&&P[j].b>=i)
    48                 q.push(P[j++]);
    49             if(!q.empty()){
    50                 ans+=q.top().a;
    51                 q.pop();
    52             }
    53         }
    54         cout<<sum-ans<<endl;
    55     }
    56     return 0; 
    57 }
    
    
    H-dp+矩阵幂
    原题bzoj1009,只不过这道题限制了可以转移的字母状态
      1 #include<iostream>
      2 #include<cstring>
      3 #include<queue>
      4 #include<cstdio>
      5 #include<stack>
      6 #include<set>
      7 #include<map>
      8 #include<cmath>
      9 #include<ctime>
     10 #include<time.h> 
     11 #include<algorithm>
     12 #include<bits/stdc++.h>
     13 using namespace std;
     14 #define mp make_pair
     15 #define pb push_back
     16 #define debug puts("debug")
     17 #define LL  long long 
     18 #define ULL unsigned long long 
     19 #define uint unsigned int
     20 #define pii pair<int,int>
     21 #define eps 1e-10
     22 #define inf 0x3f3f3f3f
     23  
     24 char s1[155],s2[155];
     25 LL mod=(LL)1<<32;
     26 struct matrix{
     27     int len;
     28     LL a[66][66];
     29     matrix(){
     30         memset(a,0,sizeof(a));
     31     }
     32     matrix operator*(matrix& tmp){
     33         matrix ans;
     34         ans.len=len;
     35         for(int i=0;i<=len;++i){
     36             for(int j=0;j<=len;++j){
     37                 for(int k=0;k<=len;++k){
     38                     ans.a[i][k]+=a[i][j]*tmp.a[j][k];
     39                     ans.a[i][k]%=mod;
     40                 }
     41             }
     42         }
     43         return ans;
     44     }
     45     
     46     void show(){
     47         puts("------------------------------------");
     48         for(int i=0;i<=len;++i){
     49             for(int j=0;j<=len;++j){
     50                 cout<<a[i][j]<<' ';
     51             }
     52             cout<<endl;
     53         }
     54         puts("------------------------------------");
     55     }
     56 }A,I;
     57 matrix qpow(matrix X,int n){
     58     matrix ans=I;
     59     while(n){
     60         if(n&1) ans=ans*X;
     61         X=X*X;
     62         n>>=1;
     63     }
     64     return ans;
     65 }    
     66 int t,n,m,i,j,k;
     67 int f[66];
     68 void solve(){
     69     int l1=strlen(s1+1),l2=strlen(s2+1);
     70     A.len=I.len=l2;
     71     memset(A.a,0,sizeof(A.a));
     72     for(i=0;i<=l2;++i) I.a[i][i]=1;
     73     f[0]=0,f[1]=0;
     74     for(i=2;i<=l2;++i){
     75         j=f[i-1];
     76         while(j&&s2[j]!=s2[i-1]) j=f[j];
     77         f[i]=j+1;
     78     } 
     79     for(i=0;i<l2;++i){
     80         for(j=1;j<=l1;++j){
     81                 k=i+1;
     82                 while(k&&s1[j]!=s2[k]) k=f[k];
     83                 A.a[i][k]++;
     84                 A.a[i][k]%=mod;
     85         }    
     86     }
     87 
     88     A.a[l2-1][l2]=0;    
     89     //A.show();
     90     matrix ans=qpow(A,n);
     91     LL res=0;
     92     for(i=0;i<l2;++i) res=(res+ans.a[0][i])%mod;
     93     cout<<res<<endl; 
     94 }
     95 int main(){
     96 
     97     scanf("%d",&t);
     98     while(t--){
     99         scanf("%d%s%s",&n,s1+1,s2+1);
    100         solve();
    101     }
    102     return 0;
    103 }
    104 /*
    105 3
    106 3
    107 ab
    108 ab
    109 4
    110 acd
    111 ca
    112 
    113 5
    114 ab
    115 aaa
    116 */
    
    
    


    I,b-a;

    J : 压死骆驼的最后一根稻草

    Progress Bar

    时间限制:1 Sec 内存限制:128 MiB
    提交:113 答案正确:14

    提交

    题目描述

    每个人 都有自己独有的计数方式  比如以下  字符串111123455可以表示为4个1,1个2,1个3,1个4,2个5.为了方便记忆就表示为4--1,1--2,1--3,1--4,2--5当然顺序肯定不能变换  计数方式可以表示为“a--b”的形式  在计数方式中相连的b互不相等且a与b不为0   独有的计数方式 如果转化为字符串  字符串的长度小于10的9次方

    给你下面的计数方式    例如5--4也就是字符串44444,10--4也就是字符串4444444444

    给你这样的计数方式  判断这个字符串中有多少连续子串所构成的整数是4的倍数

    例如5--4可表示为字符串44444里面共有(4,4,4,4,4,44,44,44,44,444,444,444,4444,4444,44444)15个是4的倍数;

    输入

    第一行是数字T(T<1000)<t<100)  表示下面有t组实例<="" h3="">

    每一行一个独有的计数方式  长度小于100

    <t<100)  表示下面有t组实例<="" h3="">

    输出

    输出字符串中有多少个是4的倍数  占一行

    样例输入

    复制
    4
    5--4
    1--1,1--2
    2--4,2--2,2--3
    1--4,1--3,1--2,1--1

    样例输出

    33

      打表查一下4的倍数的数字会发现规律,对于个位数,只有4/8是4的倍数,对于多位数,如果个位是奇数那他不可能是4的倍数,
    如果
    个位数是0/4/8,那十位数只有是偶数,这个数才是4的倍数;如果个位数是2/6那么十位数只有是奇数这个数才是4的倍数。
    知道规律就简单了,记录下pre表示前面几段有多少个数字,枚举一下当前段的数字,奇数不管,2/6就加上pre,4/8根据前面的
    数的奇偶性分情况讨论一下。
      
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 #define LL long long 
     7 #define uint unsigned int
     8  
     9  
    10 LL a[110],b[110];
    11 char s[110];
    12 int main()
    13 {
    14     int i,j,k,t;
    15  
    16     scanf("%d",&t);
    17     getchar();
    18     while(t--){
    19         int tot=0;
    20         gets(s);
    21         LL ans=0,pre=0;
    22         
    23         LL n=strlen(s),tmp=0;
    24         s[n]=',';
    25         for(i=0;i<=n;++i){
    26             if(isdigit(s[i])){
    27                 tmp=tmp*10+(s[i]-'0');
    28             }
    29             else if(s[i]=='-'){
    30                 i++;
    31                 tot++;
    32                 a[tot]=tmp;
    33                 tmp=0;
    34             }
    35             else if(s[i]==','){
    36                 b[tot]=tmp;
    37                 tmp=0;
    38             }
    39         }
    40         for(i=1;i<=tot;++i){
    41             
    42             
    43             if(b[i]==2||b[i]==6){
    44                 if(b[i-1]%2==1){
    45                     ans+=pre;
    46                 }
    47             }
    48             else if(b[i]==4||b[i]==8){
    49                 if(b[i-1]%2==0){
    50                     ans+=a[i]*(pre+pre+a[i]+1)/2;
    51                 }
    52                 else{
    53                     ans+=a[i]*(pre+pre+a[i]+1)/2;
    54                     ans=ans-pre;
    55                 }
    56             }
    57             pre+=a[i];
    58         }
    59         cout<<ans<<endl;
    60     }
    61     return 0;
    62 }
    63  


    
    
    
    
    
    
  • 相关阅读:
    luoguP4389 付公主的背包 多项式exp
    bzoj3456 城市规划 多项式求In
    luoguP4491 [HAOI2018]染色 广义容斥原理 + FFT
    计蒜之道2019复赛题解
    Educational Codeforces Round 66 (Rated for Div. 2)
    [CodeChef-ANUDTQ] Dynamic Trees and Queries
    M-SOLUTIONS Programming Contest
    Codeforces Global Round 3
    PKUSC2019题解
    [LOJ#3120][Luogu5401][CTS2019]珍珠(容斥+生成函数)
  • 原文地址:https://www.cnblogs.com/zzqc/p/9029790.html
Copyright © 2020-2023  润新知