第一题:(骗分容易,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 解题报告的更多相关文章

  1. 常州培训 day5 解题报告

    第一题:(贪心) 题目大意:给出N*M的矩形,要用正方形将它铺满(正方形之间不能重叠),相邻的正方形颜色不能相同,颜色用ABCD表示.要求从上到下从左到右字典序最小. N,M<=100 解题过程 ...

  2. 常州培训 day7 解题报告

    最后一天..有些感慨,这七天被虐的感动万分 第一题: 题目大意: 求出 n*i(i=1,2,3....n) mod p的逆元  n<p<=3000000 ,p是质数. 之前写过了,懒得再写 ...

  3. 常州培训 day6 解题报告

    第一题: 题目大意: 给出一个N*N的矩阵,矩阵元素均为0或1.定义矩阵权值为sum(F[i][j]*F[j][i]); 给出K个操作: 询问矩阵的权值mod 2. 将矩阵的某一行元素取反(0变成1, ...

  4. 常州培训 day4 解题报告

    第一题:(简单的模拟题) 给出一个N位二进制数,有‘+’, ‘-’, ‘*’, ‘/’ 操作,分别表示加1,减1,乘2,除以2,给出M个操作,求出M个操作后的二进制数.N,M<=5000000; ...

  5. 常州培训 day3 解题报告

    第一题: 给出数轴正半轴上N个点的坐标和其权值,给出初始体力值M,人一开始在位置0,体力值会随着走过路程的增加而增加,走多少个单位的路消耗多少体力值.到每个点可以打掉,消耗的体力值就是其权值.求 最多 ...

  6. 常州培训 day2 解题报告

    第一题: 题目大意: 给出一个M面的骰子,投N次,求最大期望值. 最大期望值的定义: 比如M=2,N=2, 那么 2次可以是 1,1,最大值为1: 1,2最大值为2: 2,1最大值为2: 2,2 最大 ...

  7. 学大伟业Day1解题报告

    学大伟业Day1解题报告 张炳琪 一.   时间分配 T1:30分钟  T2: 60分钟  T3:100分钟 二.答题情况及错因 T1:100         T2:55             T3 ...

  8. NOIP2018提高组Day1 解题报告

    前言 关于\(NOIP2018\),详见此博客:NOIP2018学军中学游记(11.09~11.11). 这次\(NOIP\ Day1\)的题目听说很简单(毕竟是三道原题),然而我\(T3\)依然悲剧 ...

  9. NOIP 2017 Day1 解题报告

    总分:100分 T1,小凯的疑惑, 100分 T2,时间复杂度,0分 T3,逛公园,0分 T1 ###题意简化: 给定两个互质的数字,输出最大不能表示的数: 基础数论题目 代码: #include&l ...

随机推荐

  1. js原型链闭包作用域链-Tom

    1.原型相当于Java.C++里面的父类,由封装公有属性及方法而产生,子类可以继承. 原型继承实现(函数的原型属性指向原型函数一个实例对象,函数的原型的构造函数指向函数本身) 1)eg:原型链 fun ...

  2. poj1873The Fortified Forest

    链接 居然是WF的水题~ 二进制枚举砍哪些树,剩余的树围成一个凸包. 因为传数组WA了两发,忘记修改排序数组中的p[0]; #include <iostream> #include< ...

  3. (一)解决Sublime Text 2中文显示乱码问题

    欲解决问题,关键在于让Sublime Text 2支持GB2312和GBK.步骤如下: 1.安装Sublime Package Control.   在Sublime Text 2上用Ctrl+-打开 ...

  4. MyBatis——优化MyBatis配置文件中的配置

    原文:http://www.cnblogs.com/xdp-gacl/p/4264301.html 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写 ...

  5. 获取AVCaptureSession samplebuffer 一像素的 rgb值

    获取AVCaptureSession samplebuffer 一像素的 rgb值 typedef unsigned char byte; typedef struct RGBPixel{ byte ...

  6. java 集合(Vector)不做重点

    Vector: 底层也是维护了一个Object数组,实现与ArrayList是一样的, 但其线程是安全的,效率低.除了比较老的系统,是不会用到的. 笔试题:ArrayList 和 Vector 的区别 ...

  7. shader学习路线

    http://www.jianshu.com/p/7b9498e58659 http://blog.csdn.net/candycat1992/article/details/37882765

  8. navigator.userAgent.indexOf来判断浏览器类型

    navigator.userAgent.indexOf来判断浏览器类型 (2011-03-03 11:30:40) 转载▼ 标签: 杂谈   来源:http://xtaai5233.blog.163. ...

  9. jmeter笔记7

    一.脚本录制(Jmeter): Jmeter 脚本(.jmx)为 xml 格式,树形结构,由元件组成,使用“取样器”产生请求. 在“工作台”添加“HTTP 代理服务器” 端口: 代理服务器的端口,默认 ...

  10. BliBli抢楼全攻略

    B站抢楼是一个很好玩的事情,每当新番出新集时.总有很多人想能够在前排发表评论,但是因为人数众多,往往不能如愿,今天就教大家一个抢楼的好办法. 我们平时抢楼的整个流程是这样的: 1.在官方放出的新番更新 ...