https://www.lydsy.com/JudgeOnline/problem.php?id=1566 https://www.luogu.org/problemnew/show/P1758 题目见上. 这题听说是一个套路题啊…… 如果我让A玩一次游戏,B再玩一次,所得到的序列相同的情况和就正好是我们所求的答案. (比如说这款游戏有S种T序列,则A和B相同的次数显然为S*S正好就是题中给的式子.) 设f[i][j][k]为两人玩到了第i个珠子,A上管道拿了j个珠子,B上管道拿了k个珠子. 第…
题目 输入格式 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行为一个AB字符串,长度为m,表示下管道中的情形. 输出格式 仅包含一行,即为 Sigma(Ai^2) i从1到k 除以1024523的余数. 输入样例 2 1 AB B 输出样例 5 提示 样例即为文中(图3).共有两种不同的输出序列形式,序列BAB有1种产生方式,而序列BBA有2种产生方式,因此答案为5. [大致数…
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1566 思路 n个球,第i个球颜色为ai,对于颜色j,对答案的贡献为颜色为j的球的个数的平方 k^2=(1+1+1+..+1)*(1+1++1+..+1) for (i=1; i<=n; i++) for (j=1; j<=n; j++) if (a[i]==a[j]) ans++; 感觉看起来还是有一丝丝领悟的 转化为两个人分别同时做游戏 取出相同的方案 \(f[i][a][b]\)…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1566 一眼看上去很懵... 但是答案可以转化成有两个人在同时取珠子,他们取出来一样的方案数: f[i][j][k]表示一共取了 i 个珠子,第一个人取了 j 个珠子,第二个人取了 k 个珠子时一样的方案数: 于是就很好转移了: 这个转化的想法真妙啊... 代码如下: #include<iostream> #include<cstdio> #include<cstring…
来自FallDream的博客,未经允许,请勿转载,谢谢. n<=500 神题...... 发现这个平方可以看作两个序列相同的对数  然后就可以表示状态了. f[i][j][k]表示两个序列各选了i个,第1个序列在第一行选了j个,第二个序列在第二行选了k个,他们相同的方案数 转移比较简单,枚举两个序列各填哪一位即可. 复杂度n^3 #include<iostream> #include<cstdio> #include<cstring> #define MN 500…
1566: [NOI2009]管道取珠 Time Limit: 20 Sec  Memory Limit: 650 MBSubmit: 1659  Solved: 971 Description Input 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行为一个AB字符串,长度为m,表示下管道中的情形. Output 仅包含一行,即为 Sigma(Ai^2) i从1到k 除以10…
1566: [NOI2009]管道取珠 Time Limit: 20 Sec Memory Limit: 650 MB Submit: 1558 Solved: 890 [Submit][Status][Discuss] Description Input 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行为一个AB字符串,长度为m,表示下管道中的情形. Output 仅包含一行,…
又是艰难想题的一晚,又是做不出来的一题 (:д:) 好想哭啊…… 这题最关键的一点还是提供一种全新的想法.看到平方和这种东西,真的不好dp.然而我一直陷在化式子的泥潭中出不来.平方能够联想到什么?原本的方案的乘积.将两部分相乘,我们能够联想到这是两个人在取珠,求他们取出来的珠子颜色序列相同的方案数之和.(第一个人要得到 \(x\) 这种颜色方案有\(a_{x}\)种,第二个人也一样.所以一共为 \({a_{x}}^{2}\) 种.到这里,应该就很容易了.虽然看了题解之后恍然大悟,然而深深地明白目…
原题链接 原题让求的是\(\sum\limits a_i^2\),这个东西直接求非常难求.我们考虑转化一下问题. 首先把\(a_i^2\)拆成\((1+1+...+1)(1+1+...+1)\),两个括号中的\(1\)都有\(a_i\)个.为什么要这样呢?仔细理解一下拆开后的式子,是不是就是相当于分别操作两次,问最终序列相同的方案数? 这样的话\(DP\)就比较好想了,设\(f[i][j][k][l]\)表示第一次操作上管道已经取了\(i\)个,下管道取了\(j\)个,第二次操作上管道取了\(k…
BZOJ 洛谷 考虑\(a_i^2\)有什么意义:两个人分别操作原序列,使得得到的输出序列都为\(i\)的方案数.\(\sum a_i^2\)就是两人得到的输出序列相同的方案数. \(f[i][j][k]\)表示第一个人上管道取到了第\(i\)个球,下管道取到了第\(j\)个球,第二个人上管道取到了第\(k\)个球,的方案数.转移很简单. 复杂度\(O(n^3)\). //2816kb 1072ms #include <cstdio> #include <algorithm> #d…