Luogu 1641 [SCOI2010]生成字符串】的更多相关文章

Description 有$N$ 个 $1$ 和 $M$ 个 $0$ 组成的字符串, 满足前 $k$ 个字符中 $1$ 的个数不少于 $0$ 的个数. 求这样字符串的个数. $1<=M <=N<=1e6$ Solution 正难则反, 很难直接求出满足条件的字符串的个数, 就从反面考虑. $N$个$1$ 和 $M$ 个 $0$ 组成的字符串总共有 $C(N + M, N)$ 个, 再减去不满足条件的 字符串的个数就能够得到答案了. 不满足条件的字符串个数为$C(N+M,N+1)$ 证明与…
结果和dp没有一点关系…… 30分算法:设$f_{i, j}$表示已经选了$i$个并且有$j$个是白色的状态数,转移显然,最后答案就是$f_{n + m, m}$,时间复杂度$O(n^{2})$. 100分算法: 大神讲的好. 把已经选了的$0$的个数和$1$的个数和看作$x$轴,已经选了个$1$的个数和$0$的个数的差看作$y$轴,就相当于每一步可以向右上或者是右下走一步,最后要到达$(n + m, n - m)$的方案数. 可以发现就相当于在$n + m$步中选出$m$步向右下走的方案数$\…
BZOJ原题链接 洛谷原题链接 可以将\(1\)和\(0\)的个数和看成是\(x\)轴坐标,个数差看成\(y\)轴坐标. 向右上角走,即\(x\)轴坐标\(+1\),\(y\)轴坐标\(+1\),表示这一位为\(1\). 向右下角走,即\(x\)轴坐标\(+1\),\(y\)轴坐标\(-1\),表示这一位为\(1\). 若不考虑题目中的限制,那么这就相当于从\((0, 0)\)出发,走\(n + m\)步到达\((n + m, n - m)\). 相当于从\(n + m\)步中选出\(n\)步向…
题目戳这里 一句话题意 求\(C_{m+n}^{m}\)-\(C_{m+n}^{m-1}\) Solution 巨说这个题目很水 标签居然还有字符串? 但是我还不很会用逆元真的太菜了,还好此题模数P为素数,根据费马小定理 x的P-2次方 就是x在P的意义下的逆元.只需要求出逆元然后就可以直接乘了. 貌似是有点水 Coding #include<bits/stdc++.h> using namespace std; const long long P = 20100403; long long…
传送门 代码极短 \(O(n^2)\)dp是设\(f_{i,j,k}\)表示前\(i\)位,放了\(j\)个1,后面还可以接着放\(k\)个0的方案,转移的话,如果放0,\(k\)就要减1,反之放了1,后面可以多放一个0,所以\(k\)加1,即\[f_{i+1,j,k-1}+=f_{i,j,k}\]\[f_{i+1,j+1,k+1}+=f_{i,j,k}\] 这样子还是不好优化,,, 我们可以把问题抽象化,把这个放字符过程转化为从平面直角坐标系的\((0,0)\)走到\((n,m)\),其中放1…
神仙.... 当时以为是,$x$代表$1$,$y$代表$0$,所以不能过$y=x$的路径数...结果不会... 然后康题解...ヾ(。`Д´。)竟然向右上是$1$,向右下是$0$.... 所以现在就是不能过$y=-1$: 所以我们可以这样想:如果有非法路径的话,那么就把他第一次与$y=-1$交点与起点之间的路径沿$y=-1$翻转: 然后现在非法路径的条数就是从$(0,-2)$到$(n+m,n-m)$路径数量,把他拿所有路径的减掉就行了. #include<cstdio> #include<…
[SCOI2010]生成字符串 Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足要求的字符串共有多少个,聪明的程序员们,你们能帮助他吗? 输入格式:输入数据是一行,包括2个数字n和m; 输出格式:输出数据是一行,包括1个数字,表示满足要求的字符串数目,这个数可能会很大,只需输出这个数除以20100403的余数; Solution 1…
P1641 [SCOI2010]生成字符串 题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足要求的字符串共有多少个,聪明的程序员们,你们能帮助他吗? 输入输出格式 输入格式: 输入数据是一行,包括2个数字n和m 输出格式: 输出数据是一行,包括1个数字,表示满足要求的字符串数目,这个数可能会很大,只需输出这个数除以20100403的余数 思路:模…
题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足要求的字符串共有多少个,聪明的程序员们,你们能帮助他吗? 输入输出格式 输入格式: 输入数据是一行,包括2个数字n和m 输出格式: 输出数据是一行,包括1个数字,表示满足要求的字符串数目,这个数可能会很大,只需输出这个数除以20100403的余数 输入输出样例 输入样例#1: 2 2 输出样例#1:…
题目 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足要求的字符串共有多少个,聪明的程序员们,你们能帮助他吗? 输入格式 输入数据是一行,包括2个数字n和m 输出格式 输出数据是一行,包括1个数字,表示满足要求的字符串数目,这个数可能会很大,只需输出这个数除以20100403的余数 输入样例 2 2 输出样例 2 提示 [数据范围] 对于30%的数据,保证…
卡特兰数 参考博客 介绍 卡特兰数为组合数学中的一种特殊数列,用于解决一类特殊问题 设\(f(n)\)为卡特兰数的第n项 其通项公式为 \[f(n)=\frac{2n\choose n}{n+1} \] 关于它的证明 当然也有递推式 \[f(n)=\sum\limits_{i=0}^{n-1}f(i)\ast f(n-i-1) \] 最常用的则是对于通项的变形式 \[f(n)={2n\choose n}-{2n\choose n-1} \] 在此给出一较易的证明 例题 我们来看一道例题洛谷 p1…
NOI2018冒泡排序的一个子问题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long #define P 20100403 #define N 2000010 ')) c=getchar…
题目 传送门:QWQ 分析 不想画图. https://www.luogu.org/problemnew/solution/P1641 好神仙的题啊. 代码 // luogu-judger-enable-o2 #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ; ll fac[maxn]; int exgcd(ll& x,ll& y,ll a,ll b){ ;y=;} else{ exgc…
\(n=m\)时候经典的卡特兰 那\(n!=m\)呢,还是按照卡特兰的方式来推 首先总情况数就是\(\binom{n+m}{n}\),在\(n+m\)个里选择\(n\)个\(1\) 显然有不合法的情况,减掉它们 对于一种不合法的情况,必然存在一个前缀\(0\)的个数比\(1\)多\(1\) 我们考虑构造出一个由\(n+1\)个\(1\)和\(m-1\)个\(0\)组成的序列,其必然存在一个前缀使得\(1\)的个数比\(0\)多\(1\) 于是就能一一对应了 也可以这样理解,对于每一个不合法的情况…
洛谷 这题一看就是卡塔兰数. 因为\(cnt[1] \leq cnt[0]\),很显然的卡塔兰嘛! 平时我们推导卡塔兰是用一个边长为n的正方形推的, 相当于从(0,0)点走到(n,n)点,向上走的步数不能超过向右走,求出的方案数就是卡塔兰数. 即总方案\(-\)不合法方案 -> \(\frac{C_{2n}^{n}}{n+1}\). 这题只是改成了从(0,0)走到(n,m)点,那么就是:\(C^{m+n}_{n}-C^{m-1}_{m+n}\). 因为涉及到除法取模,所以要求逆元. 刚刚好201…
题目大意:给你n个1和m个0,你要用这些数字组成一个长度为n+m的串,对于任意一个位置k,要保证前k个数字中1的数量大于等于0的数量,求所有合法的串的数量 答案转化为所有方案数-不合法方案数 所有方案数显然是 现在比较易懂的解法是转化进坐标系 从(0,0)开始,填1视为向右上↗走,填0视为向右下↘走,如果路径经过了y=-1这条直线,说明不合法 把一个经过y=-1的路径的左半部分(即在路径和y=-1交点之前的那部分路径)关于y=-1翻转 因为是从(0,0)出发,现在变成了从(0,-2)出发,求方案…
题目链接 可以看成在坐标系中从\((0,0)\)用\(n+m\)步走到\((n+m,n-m)\)的方案数,只能向右上\((1)\)或者右下\((0)\)走,而且不能走到\(y=-1\)这条直线上. 不考虑最后那个限制条件的话就是\(n+m\)次中选\(m\)次往右下走,即\(C(n+m,m)\). 然后根据对称原理,从\((0,0)\)走到\(y=-1\)上就相当于从\((0,-2)\)走到\(y=-1\)上,其方案数是一样的,所以经过\(y=-1\)的方案数其实就是从\((0,-2)\)走到\…
题面 题解 考虑到直接求合法方案不好求, 我们转化为用总方案减去不合法方案 总方案就是\(\binom{n+m}{m}\), 即在\(n+m\)个位置中放\(n\)个数 我们将初始的空序列看做\((0, 0)\), 选\(1\)代表\((+1,+1)\), 选\(0\)代表\((+1,-1)\) 那么不合法的方案就是经过\(y = -1\)的方案, 考虑如何转化 恩, 看到这张图片没, 在这条折线第一次经过\(y = -1\)时将其翻转 可以知道终点不变, 为\((n + m, n - m)\)…
C# 生成字符串的 CheckSum private static string CheckSum(string message) { char[] chars = message.ToCharArray(); ; ; i < chars.Length; i++) { checksum += (int)chars[i]; } checksum = (~checksum & 0xFFFF) + 0x0001; ).ToUpper(); } 例如,字符串“1234567890” 的 CheckS…
/// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType">数字字母组合:NUMBERLETTER 数字:NUMBER 大小写组合字母:ALLLETTER 大写字母:UPLETTER 小写字母:LOWLETTER</param> /// <param name="Length">位数</param> /// &…
使用RandomStringUtils可以选择生成随机字符串,可以是全字母,全数字,自定义生成字符等等... 其最基础的方法: 参数解读: count:需要生成的随机串位数 letters:只要字母 numbers:只要数字 chars:自定义生成字符数组,如果为null,则为所有字符 start.end:选择字符开始生成的位置-----如果chars为null,start就是ASCII你想开始生成字符的位置,end同理:chars不为空的话,就是你自定义字符数组开始生成字符的位置 random…
[Luogu 1640] SCOI2010 连续攻击游戏 DP太恶心,回来二分图这边放松一下心智. 这个建图真的是难以想到. 因为要递增啊,属性值放x部,装备放y部,对应连边跑Hungary就好了. 注意如果中间有点匹配不到了就要直接停止,输出答案(因为无法做到连续递增了). 就这样.颓废产物. #include <algorithm> #include <cstdio> #include <cstring> using namespace std; const int…
1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFull>(); JSONArray jsonArr = new JSONArray(); jsonArr.addAll(templateFulls); String jsonStr = jsonArr.toJSONString(); System.out.println(jsonStr); 或者: Str…
生成字符串(strs) [问题描述] 假设字符串只由字符“0”,“1”,“”组成,其中字符“”表示该字符可由 字符“0”或“1”替代. 现有一些字符串,根据这些字符串生成所有可生成的字符串.如: {10,1,0 }可生成{10,01,11,00 } {101,001,*01}可生成{101,001} 注意后一个例子中“*01”并没有生成新的字符串. [输入格式]strs.in 第一行是两个整数 m,n(1≤m≤15,1≤n≤2500).m 表示字符串的长度,n 表示字符串的个数. 以下 n 行每…
二次联通门 : luogu P3709 大爷的字符串题 /* luogu P3709 大爷的字符串题 莫队 看了半天题目 + 题解 才弄懂了要求什么... 维护两个数组 一个记录数字i出现了几次 一个记录出现了i次的有几个数.. */ #include <algorithm> #include <cstdlib> #include <cstdio> #include <cmath> #define Max 200090 void read (int &…
目录 JZOJ2290. [佛山市选2010]组合数计算 比赛时 之后 JZOJ2291. [佛山市选2010]生成字符串 比赛时 之后 JZOJ2292. PPMM 比赛时 之后 JZOJ2290. [佛山市选2010]组合数计算 比赛时 一看到数学题就有一种厌倦感.不论如何,还是仔细思考吧,按照公式的直接求法显然时间会爆(听同学说有一种快速求阶乘的方法,但是对于这题肯定要高精度,太麻烦了).间接入手,杨辉三角???时间复杂度和空间复杂度均为\(O(n^2)\),显然不行.有没有快速求组合数的…
//实现生成MD5值 import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import ja…
首先定义字符串 String a = "0123456789"; // 数字 String b = "abcdefghijklmnopqrstuvwxyz"; // 小写字母 String c = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 大写字母 String d = "~!@#$%^&*()_+=<>/,./;'[]{}|\\"; // 特殊字符 String result =…
在向数据库插入新数据时,可能需要插入字符串形式的ID,这时使用UUID可以生成随机字符串: String str = UUID.randomUUID().toString();…
情景: 目前有两个实体类:Student,ClassInfo. public class Student { public string Name { get; set; } public string Sex { get; set; } public string Age { get; set; } } public class Classinfo { public string Subject { get; set; } public int Score { get; set; } } St…