第一题:

题目大意:

给出N个数的数列,如果相邻的两个数加起来是偶数,那么就可以把这两个数消掉,求最多能消掉多少数。

解题过程:

1.先自己手工模拟了几组数据,发现不管消除的顺序如何,最终剩下的是一定的。所以就可以每次任意找两个奇偶性相同的消掉。于是就想到可以用双向链表来模拟。

2.更好的方法:直接用一个栈来模拟,每次加入一个元素,如何和栈顶元素奇偶性一样就弹出栈顶元素。

初始得分100.


第二题:

题目大意:

给出N个数的数列,定义区间[L,R]的权值为AL and AL+1 and AL+2...and AR 。 求是否有权值为0~m的区间。

N<=500000. Ai <=1000000

解题过程:

1.这题真心想不到正解,我就用了很多小优化骗过去了。

优化一:如果从一个左端点向右延伸,已经权值为0了,那么继续延伸下去还是0,就可以停止了。

优化二(来自lsdsjy):如果当前权值的二进制表示只有1个1了,那么就可以停止了(如果这样的话还要判断一下会不会出现0).

其实只有优化1的情况下对于随机生成的数据已经能够秒出了。不过还是不大放心,我又用类此并查集的get_father函数的方法来优化。

优化三:对于每一个元素,记录它右边第一个and 它的结果不等于它本身的数。 这样就可以干掉那些有很多重复的数字连在一起的数据了。

优化四(可能会导致WA):如果确定左端点一直延伸下去很多次,权值都没有变化,那么就退出。至于这个”很多次“具体是多少自己看着办吧,我是80次。

另外说明一下怎么卡掉优化一:只要所有数都是奇数,那么怎么and都不会是0,就退化到O(N2)了。

2.AC算法:从左往右扫描,用一个pre[i]表示当前扫描到的所有数中,二进制表示(从右往左数)第i位为0的最右边的数的位置.然后对于当前扫描的数x,以它为右端点,把所有pre排序,依次and pre数组里的数就可以了。

初始得分100.


第三题:

题目大意:

N个车站之间有M条铁路,这些铁路分别属于不同的公司,不同公司的铁路价格不一样,但都是是随着长度的增加而增加的。

也就是说从A到B的路线可以分成X段,每段都是同一家公司的铁路,每段单独算钱。

求A到B的最小花费。  N<=100,M<=5000,公司的数量<=20

解题过程:

1.这题看起来条件很多,其实没啥好怕的,实际上可以分成3个子问题。

子问题一:求出每家公司长度为x的铁路的花费。

子问题二:求出任意两点间只用公司c的铁路的最短路。

子问题三:计算A到B的最小花费。

2.对于子问题一,根据题目给的公式递推就可以。子问题二是关键,由于数据范围很小,所以可以直接用floyd变形一下来做,加一维表示状态就可以了。对于子问题三,可以用dijkstra来做,只不过转移的时候多来一重循环(枚举到底用的是哪家公司的铁路)。

初始得分70.原因是计算子问题一的数组开的太小了。


总结:

1.许多时候在考场上想不到很靠谱的算法,但是许多算法只要没有碰到恶心的数据都是可以做的,那就尽量先写出来,能拿多少分是多少。比如T2。

2.静态查错的时候不要只盯着最关键的那个函数看,数组的大小,变量名等等都要仔细的检查。

3.尽量在考试结束前10分钟就停止打代码。

省常中模拟 day1的更多相关文章

  1. 省常中模拟 Test3 Day1

    tile 贪心 题意:给出一个矩形,用不同字母代表的正方形填充,要求相邻的方块字母不能相同,求字典序(将所有行拼接起来)最小的方案. 初步解法:一开始没怎么想,以为策略是每次填充一个尽量大的正方形.但 ...

  2. 省常中模拟 Test1 Day1

    临洮巨人 排序 题意:在字符串中找出 A.B.C 三个字母出现次数相同的区间个数. 初步的解法是前缀和,用 a(i), b(i), c(i) 表示在位置 i 之前(包括 i)各有 字母 A.B.C 多 ...

  3. 省常中模拟 Test2 Day2

    two 模拟 大意:给你一个 N 位二进制数,有四种操作:加1.减1.乘2.整除2.给定一个操作序列,求最终结果.N <= 5*10^6.数据保证不会在最高位上进行进位或退位操作. 初步解法:由 ...

  4. 省常中模拟 day2

    第一题: 题目大意: 有mn颗糖,要装进k个盒子里,使得既可以平均分给n个人,也可以平均分给m个人. 求k的最小值. 解题过程: 1.先看一组小数据(13,21).那么根据贪心的原则很容易想到先拿13 ...

  5. 省常中模拟 Test4

    prime 数论 题意:分别求 1*n.2*n.3*n.... n*n 关于模 p 的逆元.p 是质数,n < p. 初步解法:暴力枚举.因为 a 关于模 p 的逆元 b 满足 ab mod p ...

  6. 省常中模拟 Test3 Day2

    matrix 找规律 题意:给定一个 N*N 的只有 0 和 1 的矩阵,有 Q 个操作,分三种:1. 将某行上的所有数字取反:2. 将某列上的所有数字取反:3. 输出 sum{ a[i][j]*a[ ...

  7. 如何在C#中模拟C++的联合(Union)?[C#, C++] How To Simulate C++ Union In C#?

    1 什么是联合? 联合(Union)是一种特殊的类,一个联合中的数据成员在内存中的存储是互相重叠的.每个数据成员都在相同的内存地址开始.分配给联合的存储区数量是“要包含它最大的数据成员”所需的内存数. ...

  8. Python中模拟enum枚举类型的5种方法分享

    这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下   以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...

  9. 在C#中模拟Javascript的setTimeout方法

    在C#中模拟Javascript的setTimeout方法 背景 每种语言都有自己的定时器(Timer),很多人熟悉Javascript中的setInterval和setTimeout,在Javasc ...

随机推荐

  1. Java语言中,类所拥有的“孩子”,他们的关系是怎样的

    学习了一本有关Java的书.初步了解了一些面向对象的内容. java是由一个个的类组成的,这些类组成了java程序.类之下有他的孩子,这四个孩子分别是: 成员变量:就相当于一个个的变量,他由stati ...

  2. 数据库连接driverClass和jdbcUrl大全

    一.MySQL: driverClass:com.mysql.jdbc.Driver                         org.gjt.mm.mysql.Driver jdbcUrl:j ...

  3. Unity随机随学

    1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作.渲染管道中的步骤很多,都要将几何物体从一个坐标系中变换到另一个坐标系中去. 主要步骤有: 本地坐标->视图坐标-> ...

  4. 02-FPGA设计流程介绍——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线——普利斯队长精心奉献 课程目标: 1.了解并学会FPGA开发设计的整体流程 2.设计一个二选一选择器并进行功能仿真.时序仿真以及板级验证 实验平台:芯航线FPGA开发板.杜邦线 实验内容: 良 ...

  5. datagridview随窗体的大小而变,表格填满控件

    在C#winform布局的时候,我们拖一个datagridview到窗体上面,将datagridview调整为适合窗体的大小,但是我们运行之后,点击最大化按钮的时候,却发现datagridview的大 ...

  6. python基本数据类型之集合set

    一.集合的定义 set集合,是一个无序且不重复的元素集合. 集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键.集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数 ...

  7. Thinkphp单字母快捷键

    在ThinkPHP中有许多使用简便的单字母函数(即快捷方法),可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找. 1.U() URL组装 支持不同UR ...

  8. 【20160924】GOCVHelper 图像处理部分(1)

    增强后的图像需要通过图像处理获得定量的值.在实际程序设计过程中,轮廓很多时候都是重要的分析变量.参考Halcon的相关函数,我增强了Opencv在这块的相关功能.      //寻找最大的轮廓     ...

  9. Android中插件开发篇之----类加载器

    关于插件,已经在各大平台上出现过很多,eclipse插件.chrome插件.3dmax插件,所有这些插件大概都为了在一个主程序中实现比较通用的功能,把业务相关或者让可以让用户自定义扩展的功能不附加在主 ...

  10. SQL Server 2012 管理新特性:AlwaysOn【转】

    http://jimshu.blog.51cto.com/3171847/871169 见超链接