难度

不断网:☆☆☆

断网:☆☆☆☆

/*
卡特兰数取模 由于数据范围小,直接做。
考试时断网。忘记卡特兰数公式,推错了只有5分。
数学公式要记别每次都现用现搜!!!
*/
#include<iostream>
#include<cstdio>
#include<cstring> using namespace std;
int f[];
int n,m,ans; int main()
{
freopen("stack.in","r",stdin);
freopen("stack.out","w",stdout);
scanf("%d",&n);
f[]=;f[]=;
for(int i=;i<=n;i++)
for(int j=,k=i-;j<=i- && k>=;j++,k--)
f[i]+=(f[j]*f[k])%;
printf("%d",f[n]%);
return ;
}
/*
模数较小是一个坑点,直接做逆元可能爆掉(模数很小许多数没有逆元)
答案是 2n!/(n!*(n+1))! 如果直接逆元,2n!预处理很可能成为零,但做了除法后答案可能不是零,就会出错。
所以7的倍数要单独考虑
这里记录了7的倍数的因子里7的幂,然后分子分母就可以加加减减了。这个题用不到。
原来逆元还可以直接搞...
*/
#include<bits/stdc++.h> #define N 1007 using namespace std;
int n,m,d,c,r; int fac(int n)
{
r=;
for(int i=;i<=n;i++)
{
if(i%) r=r*i%;
else
{
int x=i;
while(x%==) {x/=;c+=d;r=r*x%;}
}
}return r;
} int inv(int x)
{
for(int i=;i<;i++)
if(i*x%==) return i;
} int main()
{
scanf("%d",&n);
d=;c=;
r=fac(*n);
int ans=(r*inv(fac(n))%*inv(fac(n+))%)%;
printf("%d\n",c?:ans);
return ;
}

/*
带权并查集
维护链底,链顶,并查集找链底,并维护链的大小
合并时两个链顶链底都要维护。别忘了链底size大小改为1。
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 30007 using namespace std;
int n,m,ans,cnt;
int top[N],dep[N],siz[N]; int find(int x)
{
if(x==dep[x]) return x;
int tmp=dep[x];
dep[x]=find(tmp);
siz[x]+=siz[tmp];
return dep[x];
} void merge(int a,int b)
{
int r1=find(a),r2=find(b);
dep[r1]=top[r2];
top[r2]=top[r1];
siz[r1]=;
} int main()
{
freopen("cube.in","r",stdin);
freopen("cube.out","w",stdout);
int x,y;char ch;
scanf("%d",&n);
for(int i=;i<=n;i++) top[i]=dep[i]=i;
while(n--)
{
cin>>ch;
if(ch=='M')
{
scanf("%d%d",&x,&y);
merge(x,y);
}
else
{
scanf("%d",&x);find(x);
printf("%d\n",siz[x]);
}
}
return ;
}

/*
区间dp,情况有些多需要讨论
首先连续相同的颜色为了方便要合并,记录每个块的颜色,就可以dp了
dp[l][r]表示合并这段区间的最小步数,分几种情况
这段区间是奇数(为了避免区间长度为2的情况)
1. color[l]==color[r] && tot[l]+tot[r]==2 --> dp[l][r] 可从 dp[l+1][r-1]+1 转移过来。
2. color[l]==color[r] && tot[l]+tot[r]>2 --> dp[l][r] 可从 dp[l+1][r-1] 转移过来。
3. color[l]==color[k]==color[r](k∈(l,r) && [l,k],[k,r] 为奇数) -->可从dp[l+1][k-1]+dp[k+1][r-1]转移过来。
这段区间是偶数
普通的转移 dp[l][r] =min(dp[l][r] , dp[l][k]+dp[k+1][r]);
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 257 using namespace std;
int dp[N][N],col[N],a[N];
char s[N];
int n,m,ans; int main()
{
freopen("zuma.in","r",stdin);
freopen("zuma.out","w",stdout);
scanf("%s",s);n=strlen(s);
a[]=;m=;
for(int i=;i<n;i++)
{
if(s[i]==s[i-])
{
col[m]=s[i]==''?:;
a[m]++;
}
else
{
a[++m]=;
col[m]=s[i]==''?:;
}
} for(int len=;len<=m;len++)
{
for(int i=;i<=m;i++)
{
int j=i+len;
if(j>= && j<=m)
{
dp[i][j]=*n;
if(len==) dp[i][j]=-a[i];
else
{
for(int k=i;k<j;k++)
dp[i][j]=min(dp[i][k]+dp[k+][j],dp[i][j]); if((j-i)%==)
{
if(a[i]+a[j]==)
{
if(col[i]==col[j])
dp[i][j]=min(dp[i][j],dp[i+][j-]+);
} else
{
if(col[i]==col[j])
dp[i][j]=min(dp[i][j],dp[i+][j-]);
} if(a[i]+a[j]<)
for(int k=i+;k<j;k+=)
{
if(a[k]==) dp[i][j]=min(dp[i+][k-]+dp[k+][j-],dp[i][j]);
}
}
}
}
}
}
printf("%d\n",dp[][m]);
return ;
}

湖南集训Day1的更多相关文章

  1. 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1

    目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...

  2. 主席树 || 可持久化线段树 || BZOJ 3653: 谈笑风生 || Luogu P3899 [湖南集训]谈笑风生

    题面:P3899 [湖南集训]谈笑风生 题解: 我很喜欢这道题. 因为A是给定的,所以实质是求二元组的个数.我们以A(即给定的P)作为基点寻找答案,那么情况分两类.一种是B为A的父亲,另一种是A为B的 ...

  3. P3900 [湖南集训]图样图森破

    P3900 [湖南集训]图样图森破 链接 分析: 感觉像个暴力. 可以枚举回文串的回文中心,即枚举一个串,枚举一个串的位置作为回文中心,然后求出这个串内的回文串的长度. 此时如果回文串两端都没有到这个 ...

  4. 国庆集训 Day1 T2 生成图 DP

    国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...

  5. 2019暑期金华集训 Day1 组合计数

    自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...

  6. 2019暑期金华集训 Day1 数据结构

    自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\ ...

  7. LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)

    LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...

  8. 牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并)

    牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并) 题意:给你一颗树,要求找出简单路径上最大权值为1~n每个边权对应的最大异或和 题解: 根据异或的性质我们可以得到 \ ...

  9. 暑假集训Day1 整数划分

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

随机推荐

  1. Xcode5编译ffmpeg

    命令行安装FFmpeg:git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg(或:到https://github.com/gabriel/ffmpeg ...

  2. 前端安全 xss

    整体的 XSS 防范是非常复杂和繁琐的,不仅需要在全部需要转义的位置,对数据进行对应的转义.而且要防止多余和错误的转义,避免正常的用户输入出现乱码. 虽然很难通过技术手段完全避免 XSS,但可以总结以 ...

  3. UVA - 1620 Lazy Susan(逆序数)

    题目: 把1~n(n≤500)放到一个圆盘里,每个数恰好出现一次.每次可以选4个连续的数字翻转顺序.问能不能变成1.2.3....n的顺序. 思路: 这样的题的规律真的是一点都不好推,看了网上的博客知 ...

  4. 第十一节:Web爬虫之数据存储(数据更新、删除、查询)

    接着上一节的内容 5.MySQL数据更新 结果是将id=3的name进行更新操作,结果如下: 6.MySQL数据去重及更新 结果是判断数据是否有重复的,如果有重复的将不再存储,若没有重复的就更新数据进 ...

  5. shell输出颜色、printf输出颜色

    1.echo开启彩色输出: -e 开启echo中的转义: \e或者\033来输出Esc颜色: 恢复默认颜色为:\e[0m; 命令格式: echo -e "\e[字背景颜色:文字颜色m字符串\ ...

  6. 你的ExcelUtil简单、高效、易扩展吗

    你的ExcelUtil简单.高效.易扩展吗 Author: Dorae Date: 2018年10月23日12:30:15 转载请注明出处 一.背景 最近接到了和Excel导出相关的需求,但是: 项目 ...

  7. C - How Many Tables 并查集

    Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Ignatius wants to kn ...

  8. Ubuntu 16.04常用快捷键(转)

    注意:在Linux下Win键就是Super键 启动器 Win(长按) 打开启动器,显示快捷键 Win + Tab 通过启动器切换应用程序 Win + 1到9 与点击启动器上的图标效果一样 Win + ...

  9. ChargeSystem——One,Two,Three

    在提高班,大家都知道"ChargeSystem",中文名字为"机房收费系统". 在提高班,米老师的经典语录中有这么一句话:"学习是须要不断重复的过程. ...

  10. objc_setAssociatedObject 1

    [Objective-C]关联(objc_setAssociatedObject.objc_getAssociatedObject.objc_removeAssociatedObjects) 标签:  ...