A

记得以前做过 当时好像没做对 就是找个子串 满足括号的匹配 []最多的

开两个栈模拟 标记下就行

 #include <iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<stdlib.h>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
#define N 100010
char s[N];
char st[N];
int sn[N][];
int main()
{
int i,k,top=;
cin>>s;
k = strlen(s);
sn[][] = -;sn[][] = -;
for(i = ;i < k ;i++)
{
if(s[i]=='('||s[i]=='[')
{
st[++top] = s[i];
sn[top][] = i;
sn[top][] = ;
sn[top][] = i;
}
else
{
if(s[i]==')')
{
if(top&&st[top]=='(')
{
top--;
sn[top][] += sn[top+][];
sn[top][] = i;
}
else
{
st[++top] = s[i];
sn[top][] = i;
sn[top][] = ;
sn[top][] = i;
}
}
else
{
if(top&&st[top]=='[')
{
top--;
sn[top][] += sn[top+][]+;
sn[top][] = i;
}
else
{
st[++top] = s[i];
sn[top][] = i;
sn[top][] = ;
sn[top][] = i;
}
}
}
}
int maxz=,x=;
for(i = ; i <= top ; i++)
{
if(maxz<sn[i][])
{
maxz = sn[i][];
x = i;
}
}
cout<<maxz<<endl;
for(i = sn[x][]+ ; i <= sn[x][] ; i++)
cout<<s[i];
puts("");
return ;
}

B

这题。。描述的很抽象。 按我的话来说 就是对于每一个s[i]总能找到一个子串包含它 而且与t串相等 t串还必须包含了s串的所有字母

做法:开个标记数组 标记每个字母向前以及向后最大的匹配位置 是否大于等于t串的长度

 #include <iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<stdlib.h>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
#define N 200010
char s[N],t[N];
int o[N],f[],w[N];
int main()
{
int i,j,k,tk;
while(cin>>s)
{
memset(o,,sizeof(o));
memset(w,,sizeof(w));
memset(f,,sizeof(f));
k = strlen(s);
cin>>t;
tk = strlen(t);
for(i = tk- ; i >= ; i--)
{
f[t[i]-'a'] = ;
}
for(i = k- ; i >= ; i--)
{
if(!f[s[i]-'a']) break;
}
if(i!=-||s[]!=t[])
{
puts("No");
continue;
}
j = ;
for(i = ; i < k ;i++)
{
if(s[i]==t[j])
{
j++;
o[i] = j;
f[s[i]-'a'] = j;
}
else
{
o[i] = f[s[i]-'a'];
}
}
memset(f,,sizeof(f));
j = tk-;
for(i = k- ; i >= ;i--)
{
if(s[i]==t[j])
{
j--;
w[i] = tk--j;
f[s[i]-'a'] = tk--j;
}
else
{
w[i] = f[s[i]-'a'];
}
}
for(i = ; i < k ;i++)
{
if(o[i]+w[i]<=tk) break;
//cout<<o[i]<<" "<<w[i]<<endl;
}
if(i==k)
puts("Yes");
else puts("No");
}
return ;
}

C 数论题

无奈数论太差 研究题解研究了好久。。可以推公式 我把具体的推法写一下 具体公式是对于第i个数来说 k次转换的结果 是 c(k+j-1,j)个a[j]之和 (j<=i) 就是当前的数 是由多个个a[j]组成的

比如 a[i]都为1  n为5 吧  初始为 1 1 1 1 1

就可以推了 k=1时  第一个数  1     =1           k = 2  第一个数  1     =1                                 ===》 1

         第二个数   1 1 (代表1个a[1] 1个a[j]) =2                 第二个数   2 1          (代表2个a[1] 1个a[j]) =3      ===》  3 1

         第三个数   1 1 1          = 3      +(2,1)  ===>            第三个数   3 2 1          = 6                                ===》  6 3 1

         第四个数 1 1 1 1        = 4      +(3,2,1) ====>        第四个数 4 3 2 1        = 10                                  ====》 10 6 3 1

         第五个数   1 1 1 1 1      =5      +(4,3,2,1)====>      第五个数   5 4 3 2 1     = 15                                =====》  15 10 6 3 1

差不多基本可以看下了 题解说可以看出规律为。。。 说实话我没看出来。。。  不过我验证了它的规律。。。 对于k此操作 对应的用去a[j]的个数 为o[j] = c(k+j-1,j);

注意这里不要用反  例如上面最后一组 是15个a[0] 10个a[1]..1个a[4]

另外一些数论的知识 因为涉及到组合数 又涉及到取余 所以涉及到了逆元  对于除法的逆元  a/b = ab^-1%mod   b^-1为其逆元

逆元又涉及到一递推公式  i的逆元 nv[i]=(-MOD/i*nv[MOD%i]);    验证:两边同乘i nv[i]*i = (-mod/i*nv[mod%i])*i;     逆元性质 a*nv[a]%MOD=1 1 = (-mod/i)*i*1/(mod%i)

so i*(-MOD/i) == (MOD%i)%MOD

-(MOD-MOD%i) == (MOD%i)%MOD  这个式子显然成立  证完

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
#include<queue>
#include<set>
using namespace std;
#define N 2010
const double eps = 1e-;
const double pi = acos(-1.0);
const double inf = ~0u>>;
#define LL long long
#define mod 1000000007
LL a[N],v[N],o[N];
LL cn(int n,int m)
{
int i;
LL s = ;
for(i = ; i <= m ;i++)
{
s = ((s*v[i])%mod*(n-i+))%mod;//除法取余 乘其逆元
}
return s;
}
int main()
{
int i,j,n,k;
cin>>n>>k;
for(i = ; i < n ; i++)
cin>>a[i];
if(k==)
{
for(i = ; i< n ;i++)
cout<<a[i]<<" ";
puts("");
return ;
}
v[] = v[] = ;
for(i = ; i < n ; i++)
v[i] = ((-mod/i*v[mod%i])%mod+mod)%mod;
for(i = ; i < n ;i++)
{
o[i] = cn(i+k-,i);
}
for(i = ; i < n; i++)
{
LL ans=;
for(j = ; j <= i ; j++)
ans=(ans+a[j]*o[i-j])%mod;
cout<<ans<<" ";
}
puts("");
return ;
}

最新文章

  1. app开发项目简单的结构一
  2. MyBatis Generator 详解
  3. AX7: Install a deployable package
  4. 如何更改tableView cell的accessoryView位置,如何让首尾的Separator不显示
  5. JQuery思维导图
  6. cocosbuilder3.0使用小记
  7. Python科学计算利器——Anaconda
  8. Windows 10 IoT Core Samples
  9. 1、android orm之greendao
  10. kendo ui grid控件在选择行时如何取得所选行的某一列数据
  11. OSGI在Eclipse中执行-console出错的问题
  12. Java利用Rxtx进行串口通讯
  13. 从汇编看c++中指向成员变量的指针(二)
  14. eclipse 精确查询
  15. redis 持久化之 RDB
  16. vue mint-ui 实现省市区街道4级联动(仿淘宝京东收货地址4级联动)
  17. 遗传算法解决TSP问题实现以及与最小生成树的对比
  18. day20.序列化模块
  19. 加密 解密 RSA &amp; AES &amp; DES
  20. OpenStack报错:MessagingTimeout: Timed out waiting for a reply to message ID

热门文章

  1. Selenium系列之--测试框架断言【转】
  2. 【转】PLSQL_标准删除的方式Delete/Drop/Truncate区别和比较
  3. HDU 4786(最小生成树 kruskal)
  4. 块状元素的text-align对齐属性
  5. POJ 1061 青蛙的约会(扩展GCD求模线性方程)
  6. Ubuntu14.04常用安装
  7. IDEA失效的解决办法
  8. 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) D.Dinner Bet 概率DP+排列组合
  9. vim怎么把一个写的代码文件另存到任意文件夹里?
  10. 什么是PMU(PMIC)【转】