常州培训 day1 解题报告
第一题:(骗分容易,AC难。)
题目大意:
给出一个字符串,找出满足条件A的区间的个数。A:字符A,B,C的出现次数相同。 都出现0次也算,区间的长度可以是0(就是只有一个数).
30% |S| ≤ 100 。
70% |S| ≤ 1000 。
100% 1 ≤ |S| ≤ 1000000 。
解题过程:
1.考场上想不出AC算法,但是70分是很好拿的,最先想到先求出A,B,C出现次数的前缀和,枚举区间的两个端点,O(1)时间判断,枚举O(n^2)。
2.一看后面的题目都不是很好写,就先来优化一下这题,由于只有A,B,C是有用的,所以把其他字母拿掉,并把每个有效字母(A,B,C)后面的无效字母的个数保存下来,然后方法和前面一样,加些细节处理,这样就可以把区间的长度大大缩短。但是实际证明,这样是在做无用功,还是只有70分,还不如直接朴素算法省力。
3.AC算法:假设区间[i,j]符合要求,那么SUMA[j]-SUMA[i-1]=SUMB[j]-SUMB[i-1]=SUMC[j]-SUMC[j-1],变形一下得到
SUMA[j]-SUMB[j]=SUMA[i-1]-SUMB[i-1];
SUMB[j]-SUMC[j]=SUMB[i-1]-SUMC[i-1];
也就是说 如果区间[i,j]符合要求,必须满足j和i-1的 A-B的个数相等,j和i-1的B-C的个数相等。
那么只要把一个点 描述成一个二元组{SUMA-SUMB,SUMB-SUMC}, 找到一个和它完全相等的,就可以当成一个符合要求的区间的两个端点。
那么只要把所有二元组排个序,以SUMA-SUMB为第一关键字,SUMB-SUMC为第二关键字。如果有连续的n个相等的二元组,那么就表示有n*(n-1)/2个合法区间,累加到答案里就好。
但是这样还不完善,这样是没法找出 区间[1,R]的(一开始没考虑到,想了半天才明白,因为如果[i,j]合法,我们找到的是i-1和j,而0并没有算进去)。 所以一开始要虚拟一个二元组{0,0}再排序。
第二题:(较难)
题目大意:
给出一个N个点M条边的无环图DAG,点的编号是1—N,求出满足条件A的路径的数量。A:路径上所有点的编号的乘积是一个完全平方数。N<=90,M<=3000.
解题过程:
1.一开始想到的自然是搜索,保存当前乘积的分解质因数结果(只要保存每个质因数个数的奇偶性,01表示即可),能拿30分。之后想到如果当前乘积是一个完全平方数, 那么继续走,要想乘积为完全平方数,那么之后走的点的编号乘积必定也是完全平方数。 那么只要反向存边做一个拓扑排序,保存以点i为起点的满足条件的路径数F[i],当搜索到一个节点node且乘积是完全平方数的时候,就不要继续搜索了,加上它所有后继点j的F[j]即可;另外N<=90,那么如果搜到当前乘积有大于等于47的质因数,那么必定不会是完全平方数了,直接终止搜索。。 丧心病狂地做了那么多,结果和爆搜一样,还是30分,只能说数据跨度有点大。。。
2.正解:状态压缩DP,F[node][s]表示以node为终点,且乘积的分解质因数结果的奇偶性情况为s的最多路径数。质因数最大为43,一共14个,所以s最大只有2^14-1。
转移方程:F[node][s]=sum(F[k][s xor j]),k为s的前驱,j为node分解质因数的结果。
复杂度分析:首先N*2^14个状态,对于每条边,都用来转移了2^14*M次,复杂度就是(2^14*(N+M));
转移的时候可以用记忆化搜索,也可以做一次拓扑排序,按照拓扑序来求F[node][s],为的是在求node时保证node的前驱已经求过。
第三题:(想到算法就很简单)
题目大意:
给出N个点M条边的无向图和边的权值,给出K对点,求出最小的D,使得删去所有权值小于等于D的边后,K对点不能互相到达。若不可能,输出-1.
30% N ≤ 100,M ≤ 300,K ≤ 100, ≤ 100 。 Xi<=100
60% N ≤ 1000,M ≤ 3000,K ≤ 1000 。
100% N ≤ 100000,M ≤ 300000,K ≤ 100000, Xi≤10^9 。
解题过程:
1.首先看无解的情况,(考试时想了半天没想到),就是 给出的点对 是两个相同的点,感觉这有点无聊了。
2.AC算法考试时没想到,做了个改造的SPFA,复杂度O(NM):先用前向星把每个点需要到达的点保存下来,从每个点出发做一次SPFA,求出到达 要到的点的路径中最大边的最小值即可,可以拿到60分(没考虑无解,55分);
3.AC算法:二分D,把所有权值小于等于D的边暂时删去,然后用并查集判断点对能否连通。(讲明白了好简单,10分钟写完的。)
成绩不是很理想,3个题目加起来才120分,和其他人的差距还是挺大的。以后还是要努力。
常州培训 day1 解题报告的更多相关文章
- 常州培训 day5 解题报告
第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程 ...
- 常州培训 day7 解题报告
最后一天..有些感慨,这七天被虐的感动万分 第一题: 题目大意: 求出 n*i(i=1,2,3....n) mod p的逆元 n<p<=3000000 ,p是质数. 之前写过了,懒得再写 ...
- 常州培训 day6 解题报告
第一题: 题目大意: 给出一个N*N的矩阵,矩阵元素均为0或1.定义矩阵权值为sum(F[i][j]*F[j][i]); 给出K个操作: 询问矩阵的权值mod 2. 将矩阵的某一行元素取反(0变成1, ...
- 常州培训 day4 解题报告
第一题:(简单的模拟题) 给出一个N位二进制数,有‘+’, ‘-’, ‘*’, ‘/’ 操作,分别表示加1,减1,乘2,除以2,给出M个操作,求出M个操作后的二进制数.N,M<=5000000; ...
- 常州培训 day3 解题报告
第一题: 给出数轴正半轴上N个点的坐标和其权值,给出初始体力值M,人一开始在位置0,体力值会随着走过路程的增加而增加,走多少个单位的路消耗多少体力值.到每个点可以打掉,消耗的体力值就是其权值.求 最多 ...
- 常州培训 day2 解题报告
第一题: 题目大意: 给出一个M面的骰子,投N次,求最大期望值. 最大期望值的定义: 比如M=2,N=2, 那么 2次可以是 1,1,最大值为1: 1,2最大值为2: 2,1最大值为2: 2,2 最大 ...
- 学大伟业Day1解题报告
学大伟业Day1解题报告 张炳琪 一. 时间分配 T1:30分钟 T2: 60分钟 T3:100分钟 二.答题情况及错因 T1:100 T2:55 T3 ...
- NOIP2018提高组Day1 解题报告
前言 关于\(NOIP2018\),详见此博客:NOIP2018学军中学游记(11.09~11.11). 这次\(NOIP\ Day1\)的题目听说很简单(毕竟是三道原题),然而我\(T3\)依然悲剧 ...
- NOIP 2017 Day1 解题报告
总分:100分 T1,小凯的疑惑, 100分 T2,时间复杂度,0分 T3,逛公园,0分 T1 ###题意简化: 给定两个互质的数字,输出最大不能表示的数: 基础数论题目 代码: #include&l ...
随机推荐
- oracle linux 下卸载
1. 关闭数据库 shutdown immeidate 2. 停止 Listener lsnrctl stop 3. 停止http服务(可选) service httpd stop 4. 用su或者重 ...
- JavaScript的严格模式
js除了在普通的常规模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).严格模式支持IE9+ Chrome FireFox 等主流浏览器. ...
- 在SSH框架中使用Spring的好处
在SSH框假中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句.Struts是用来 ...
- Single Number III
Description: Given an array of numbers nums, in which exactly two elements appear only once and all ...
- JavaWeb网页聊天室(WebSocket即时通讯)
原文:http://baike.xsoftlab.net/view/656.html Git地址 http://git.oschina.net/loopcc/WebSocketChat 概要: Web ...
- JAVA EE 第一阶段项目问题
一: 乱码 原因: 由于同组的其他同学的myeclipse默认的编码方式是GBK,而我的默认的是UTF-8.所以当我使用svn把其他同学提交到组长那里去的代码下载下来的时候,就全乱码了! 解决问题: ...
- mysql连接字符串
MySQL中 concat 函数使用方法:CONCAT(str1,str2,…)
- 20160815_设置静态IP
1.CentOS6.4x64里面默认没有文件"/etc/sysconfig/network-scripts/ifcfg-eth0"(还是 是有的,但是默认为空??以后再看吧...) ...
- 【转】loading 三种实现方式
转载:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=76872 一.通过动画实现 定义res/anim/loading.xml如 ...
- 【CITE】C# 如何 实现一个窗体和另一个窗体始终保持相对的位置
C# 如何 实现一个窗体和另一个窗体始终保持相对的位置,任由一个窗体移动,当点击按钮时,弹出的另一个窗体也与之保持相对位置(如左上角)你根据第一个窗体的location去算第二个窗体的location ...