今天瓜成一坨了。

瓜的说不出话来。

直接退役算了我。

T1

傻逼题,但是我傻逼地敲了一个线段树合并,然后把空间炸了,只剩20分,

直接dfs维护子树大小,子树中最大最小值即可统计答案。

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int n,rt,fa[N]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int ecnt,fir[N],nxt[N],to[N];
void add(int u,int v) {
nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;
} int ans;
int mi[N],mx[N],sgrt[N],sz[N];
void dfs(int x) {
mi[x]=mx[x]=x;
sz[x]=;
for(int i=fir[x];i;i=nxt[i]) {
dfs(to[i]);
sz[x]+=sz[to[i]];
mi[x]=min(mi[x],mi[to[i]]);
mx[x]=max(mx[x],mx[to[i]]);
}
if(sz[x]==mx[x]-mi[x]+) ans++;
} #define ANS
int main() {
#ifdef ANS
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
#endif
read(n);
For(i,,n) {
int u,v;
read(u); read(v);
fa[v]=u; add(u,v);
}
For(i,,n) if(!fa[i]) rt=i;
dfs(rt);
printf("%d\n",ans);
Formylove;
}

T2

我已经菜到连f[i][j]表示放完前i个数,最后一个放的数是前i个数中第j大的的方案数的dp都想不出来了。。。

上午一直在瞎yy一个三方的垃圾算法,以为t1t3稳了这题大概要T一些点,结果T1爆空间T3没拍写挂了,这题却tmd水过去了。。大概就是从小的往大的连边,这个图的拓扑序的数目就是答案,发现这个图很特殊,可以区间dp,f[l][r]表示把l~r取完的方案数,组合数转移,写的是记忆化搜索。

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(register int i=(a);i<=(b);i++)
const int N=,p=;
typedef long long LL;
typedef double db;
using namespace std;
char s[N];
int n,a[N];
LL f[N][N],C[N][N];
vector<int>vc[N]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} void pre() {
For(i,,n) {
For(k,i+,n-) if(a[k]!=&&a[k+]!=-)
vc[i].push_back(k);
}
} LL dfs(int l,int r) {
if(l>=r) return ;
if(f[l][r]==-) {
LL rs=; int k=l;
int ltot=k-l,rtot=r-k;
if(a[k+]!=-)
rs=(rs+dfs(l,k-)*dfs(k+,r)%p*C[ltot+rtot][ltot]%p)%p;
k=r;
ltot=k-l,rtot=r-k;
if(a[k]!=)
rs=(rs+dfs(l,k-)*dfs(k+,r)%p*C[ltot+rtot][ltot]%p)%p;
int up=vc[l].size();
For(j,,up-) {
if(vc[l][j]>=r) break;
k=vc[l][j];
ltot=k-l,rtot=r-k;
rs=(rs+dfs(l,k-)*dfs(k+,r)%p*C[ltot+rtot][ltot]%p)%p;
}
f[l][r]=rs;
}
return f[l][r];
} #define ANS
int main() {
#ifdef ANS
freopen("B.in","r",stdin);
freopen("B.out","w",stdout);
#endif
scanf("%s",s);
n=strlen(s);
For(i,,n-) {
if(s[i]=='D') a[i+]=-;
else if(s[i]=='I') a[i+]=;
else a[i+]=;
}
++n;
For(i,,n) C[i][]=;
For(i,,n) For(j,,i) C[i][j]=(C[i-][j]+C[i-][j-])%p;
memset(f,-,sizeof(f));
pre();
dfs(,n);
printf("%lld\n",f[][n]);
Formylove;
}
/*
IIDD?DD??I
*/

T3

先dp出lcs,f[i][j]表示a的前i个字符和b的前j个字符的lcs.

再dp答案。g[i][j]表示a的前i个字符中长度为f[i][j]并且在b的前j个字符中出现过子序列个数。

两种转移

1、不选a[i],

  如果f[i-1][j]==f[i][j]

    g[i][j]+=g[i-1][j]

2、选a[i]

  找到b的前j个字符中最靠后的一个和a[i]相等的字符b[k],

  如果f[i-1][k-1]+1==f[i][j]

    g[i][j]+=g[i-1][k-1];

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=,p=1e9+;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,f[N][N];
LL g[N][N];
char a[N],b[N]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} #define ANS
int main() {
#ifdef ANS
freopen("C.in","r",stdin);
freopen("C.out","w",stdout);
#endif
scanf("%s",a);
scanf("%s",b);
n=strlen(a); m=strlen(b);
For(i,,max(n,m)) g[i][]=g[][i]=;
For(i,,n) For(j,,m) {
if(a[i-]==b[j-]) f[i][j]=f[i-][j-]+;
else f[i][j]=max(f[i-][j],f[i][j-]);
}
For(i,,max(n,m)) g[i][]=g[][i]=;
For(i,,n) {
int k=;
For(j,,m) {
if(a[i-]==b[j-]) k=j;
if(f[i][j]==f[i-][j]) g[i][j]=g[i-][j];
if(k&&f[i-][k-]+==f[i][j]) g[i][j]=(g[i][j]+g[i-][k-])%p;
}
}
printf("%lld\n",g[n][m]);
Formylove;
}
/*
ab
aa
*/

暑假集训test-8-29的更多相关文章

  1. STL 入门 (17 暑假集训第一周)

    快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...

  2. 2015UESTC 暑假集训总结

    day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...

  3. 暑假集训Day2 互不侵犯(状压dp)

    这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...

  4. 暑假集训Day1 整数划分

    题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...

  5. [补档]暑假集训D5总结

    %dalao 今天又有dalao来讲课,讲的是网络流 网络流--从入门到放弃:7-29dalao讲课笔记--https://hzoi-mafia.github.io/2017/07/29/27/   ...

  6. 2013ACM暑假集训总结-致将走上大三征途的我

    回想起这个暑假,从开始与雄鹰一起的纠结要不要进集训队,与吉吉博博组队参加地大邀请赛,害怕进不了集训队.当时激励我月份开始接触的,记得当时在弄运动会来着,然后就问了雄鹰一些输入输出的东西,怀着满心的期待 ...

  7. [补档]暑假集训D6总结

    考试 不是爆零,胜似爆零= = 三道题,就拿了20分,根本没法玩好吧= = 本来以为打了道正解,打了道暴力,加上个特判分,应该不会死的太惨,然而--为啥我只有特判分啊- - 真的是惨. 讲完题觉得题是 ...

  8. [补档]暑假集训D1总结

    归来 今天就这样回来了,虽然心里极其不想回来(暑假!@#的只有一天啊喂),但还是回来了,没办法,虽然不喜欢这个地方,但是机房却也是少数能给我安慰的地方,心再累,也没有办法了,不如好好集训= = %da ...

  9. 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)

    J - 今年暑假不AC Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64 ...

  10. [补档]暑假集训D3总结

    考试 集训第一次考试,然而- -   总共四道题,两道打了DFS,一道暴力,一道~~输出样例~~乱搞,都是泪啊- - 目前只改了三道,回头改完那道题再上题解吧- - T2 [Poi2010]Monot ...

随机推荐

  1. app混合开发 fastlick.js 在ios上 input标签点击 不灵敏 处理

    ios11 上有这个问题 而老版本的ios没有 会出现这个的原因是使用fastclick.js点击后input没有获取焦点,所以只需要在fasyclick的源码的这个位置 可以直接在源码内搜索关键字找 ...

  2. Image另存为其他格式

    string imgPath = @"C:\ZHM01000001400001-01 青龙 白虎.tif"; Image img = Image.FromFile(imgPath) ...

  3. security安全框架 配置

    <?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns="http://w ...

  4. Android 读取<meta-data>元素的数据

    在AndroidManifest.xml中,<meta-data>元素可以作为子元素,被包含在<activity>.<application> .<servi ...

  5. 排序算法(三)堆排序及有界堆排序Java实现及分析

    1.堆排序基数排序适用于大小有界的东西,除了他之外,还有一种你可能遇到的其它专用排序算法:有界堆排序.如果你在处理非常大的数据集,你想要得到前 10 个或者前k个元素,其中k远小于n,它是很有用的. ...

  6. mybatis源码探究(-)MapperProxyFactory&MapperProxy

    在MyBatis中MapperProxyFactory,MapperProxy,MapperMethod是三个很重要的类. 弄懂了这3个类你就大概清楚Mapper接口与SQL的映射, 为什么是接口,没 ...

  7. input框多文件上传

    在input标签中加入 multiple 属性,可以在一个输入框中选择多个文件进行上传 <input type="file" name="img" mul ...

  8. PHP面试 PHP基础知识 一(引用变量)

    PHP引用变量 常见引用变量面试题: 什么是引用变量? 在PHP中用什么符号定义引用变量? 考点:PHP的引用变量的概念及定义方式 概念:在PHP中引用意味着用不用的名字访问同一个变量内容     定 ...

  9. JBoss、Tomcat、JBoss EAP、JBoss AS、wildfly,JBoss EAP安装部署,JBoss各个版本下载,JBoss允许远程访问

    感谢: https://www.cnblogs.com/invlong/p/5983334.html https://blog.csdn.net/mooncarp/article/details/78 ...

  10. 前端(十三)—— JavaScript高级:回调函数、闭包、循环绑定、面向对象、定时器

    回调函数.闭包.循环绑定.面向对象.定时器 一.函数高级 1.函数回调 // 回调函数 function callback(data) {} // 逻辑函数 function func(callbac ...