第一题:(骗分容易,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. xml配置文件详解

    1:bean的基本属性配置: <!-- id是bean的标识符,必须唯一,如果没有配置id,name默认为标识符 如果配置了id,有配置了name,那么name为别名 name可以设置多个别名, ...

  2. Jdbc入门

    JDBC入门 l  导jar包:驱动! l  加载驱动类:Class.forName(“类名”); l  给出url.username.password,其中url背下来! l  使用DriverMa ...

  3. 【转载】Spark系列之运行原理和架构

    参考 http://www.cnblogs.com/shishanyuan/p/4721326.html 1. Spark运行架构 1.1 术语定义 lApplication:Spark Applic ...

  4. pl/sql developer执行光标所在行

    一.发现问题 需要执行某一行语句时,需要选中该行语句,点击F8才行. 二.解决问题 中文版:工具->首选项->SQL窗口->自动选择语句 英文版:tools->preferen ...

  5. maven 启动 报错 Fatal error compiling: 无效的目标发行版

    http://news.tuxi.com.cn/news/119999990123162/31622105.html http://lyking2001.iteye.com/blog/837440 针 ...

  6. ITERATOR(迭代器)设计模式

    1 意图:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 2 别名(Cursor) 3 动机:队列表的访问和遍历从列表对象中分离出来放入一个迭代器对象中.   多态迭代   ...

  7. commonJS — 通用方法(for COM)

    for COM github: https://github.com/laixiangran/commonJS/blob/master/src/forCOM.js 代码 /** * Created b ...

  8. Hive优化

    hive.optimize.cp=true:列裁剪hive.optimize.prunner:分区裁剪hive.limit.optimize.enable=true:优化LIMIT n语句hive.l ...

  9. Nodejs环境变量

    PATH,就是那个意思,没有特殊含义. NODE_PATH,将node_modules作为全局模块,多个安装目录用;分开.这样node在加载模块时首先会到项目目录下的node_modules目录加载相 ...

  10. Computer assembly and maintenance

    转载请注明出处: 我所遇见的世界会更美好 第一章 计算机的基本构成和组装 1,内存的组成? (1)  RAM(随机存取存储器) (2)  ROM(只读存储器) (3)  Cache(高速缓存) 2,S ...