湖南集训Day1
难度
不断网:☆☆☆
断网:☆☆☆☆
/*
卡特兰数取模 由于数据范围小,直接做。
考试时断网。忘记卡特兰数公式,推错了只有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的更多相关文章
- 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1
目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...
- 主席树 || 可持久化线段树 || BZOJ 3653: 谈笑风生 || Luogu P3899 [湖南集训]谈笑风生
题面:P3899 [湖南集训]谈笑风生 题解: 我很喜欢这道题. 因为A是给定的,所以实质是求二元组的个数.我们以A(即给定的P)作为基点寻找答案,那么情况分两类.一种是B为A的父亲,另一种是A为B的 ...
- P3900 [湖南集训]图样图森破
P3900 [湖南集训]图样图森破 链接 分析: 感觉像个暴力. 可以枚举回文串的回文中心,即枚举一个串,枚举一个串的位置作为回文中心,然后求出这个串内的回文串的长度. 此时如果回文串两端都没有到这个 ...
- 国庆集训 Day1 T2 生成图 DP
国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...
- 2019暑期金华集训 Day1 组合计数
自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...
- 2019暑期金华集训 Day1 数据结构
自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\ ...
- LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)
LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...
- 牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并)
牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并) 题意:给你一颗树,要求找出简单路径上最大权值为1~n每个边权对应的最大异或和 题解: 根据异或的性质我们可以得到 \ ...
- 暑假集训Day1 整数划分
题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...
随机推荐
- Python学习笔记(1)对象类型
强制转换字符串函数str 如果我们求2的一百万次方是多少那么我们可以 print(2**1000000) 如果我们要求2的一百万次方有多少位那么我们可以用str函数强制转换成字符串然后len函数计算 ...
- python 使用time / datetime进行时间、时间戳、日期转换
python 使用time 进行时间.时间戳.日期格式转换 #!/usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2017/11/7 15:53 # ...
- gulp-file-include 合并 html 文件
gulp-file-include 是 gulp 插件,它提供了一个 include 方法让我们可以像后端模板那样把公共部分的页面导入进来. 安装依赖包(包括了 gulp-file-include 和 ...
- Python基础(八)装饰器
今天我们来介绍一下可以提升python代码逼格的东西——装饰器.在学习装饰器之前我们先来复习一下函数的几个小点,方便更好的理解装饰器的含义. 一.知识点复习 1, 在函数中f1和f1()有什么不同,f ...
- spring cloud feign 坑
feign是啥? 很多人可能对于feign 不是很熟悉,可以看一下其他网友的实例分享:spring cloud feign简介 如果觉得上面这个比较难的话,还有一个简单入门的:spring cplou ...
- Springboot druid监控配置
@Configuration public class DataSourceConfig { @Bean public ServletRegistrationBean statViewServlet( ...
- java nio--采用Selector实现Socket通信
server: /** * 选择器服务端 * Created by ascend on 2017/6/9 9:30. */ public class SelectorServer { // publi ...
- 设置idea快速生成doc comment
在eclipse中快速生成方法的doc comment快捷键是Alt+Shift+J, 而在idea中没有对应的快捷键,但是能实现相似的功能. 1.在方法上面输入/** 然后回车就可以生成注释了. 2 ...
- noip模拟赛 寻宝之后
题目背景 还记得NOIP2011的寻宝吗?6年之后,小明带着他的妹子小芳,再次走上了寻宝的道路. 然而这次他们寻宝回来之后,小明被困在了一个迷宫中. 题目描述 迷宫是一个n*m的字符矩阵. 小明在这个 ...
- 质因数分解 2012年NOIP全国联赛普及组
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题目描述 Description 已知正整数 n是两个不同的质数的乘积,试求出较大的那个质数 . 输入描述 Inp ...