省常中模拟 day1
第一题:
题目大意:
给出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的更多相关文章
- 省常中模拟 Test3 Day1
tile 贪心 题意:给出一个矩形,用不同字母代表的正方形填充,要求相邻的方块字母不能相同,求字典序(将所有行拼接起来)最小的方案. 初步解法:一开始没怎么想,以为策略是每次填充一个尽量大的正方形.但 ...
- 省常中模拟 Test1 Day1
临洮巨人 排序 题意:在字符串中找出 A.B.C 三个字母出现次数相同的区间个数. 初步的解法是前缀和,用 a(i), b(i), c(i) 表示在位置 i 之前(包括 i)各有 字母 A.B.C 多 ...
- 省常中模拟 Test2 Day2
two 模拟 大意:给你一个 N 位二进制数,有四种操作:加1.减1.乘2.整除2.给定一个操作序列,求最终结果.N <= 5*10^6.数据保证不会在最高位上进行进位或退位操作. 初步解法:由 ...
- 省常中模拟 day2
第一题: 题目大意: 有mn颗糖,要装进k个盒子里,使得既可以平均分给n个人,也可以平均分给m个人. 求k的最小值. 解题过程: 1.先看一组小数据(13,21).那么根据贪心的原则很容易想到先拿13 ...
- 省常中模拟 Test4
prime 数论 题意:分别求 1*n.2*n.3*n.... n*n 关于模 p 的逆元.p 是质数,n < p. 初步解法:暴力枚举.因为 a 关于模 p 的逆元 b 满足 ab mod p ...
- 省常中模拟 Test3 Day2
matrix 找规律 题意:给定一个 N*N 的只有 0 和 1 的矩阵,有 Q 个操作,分三种:1. 将某行上的所有数字取反:2. 将某列上的所有数字取反:3. 输出 sum{ a[i][j]*a[ ...
- 如何在C#中模拟C++的联合(Union)?[C#, C++] How To Simulate C++ Union In C#?
1 什么是联合? 联合(Union)是一种特殊的类,一个联合中的数据成员在内存中的存储是互相重叠的.每个数据成员都在相同的内存地址开始.分配给联合的存储区数量是“要包含它最大的数据成员”所需的内存数. ...
- Python中模拟enum枚举类型的5种方法分享
这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下 以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...
- 在C#中模拟Javascript的setTimeout方法
在C#中模拟Javascript的setTimeout方法 背景 每种语言都有自己的定时器(Timer),很多人熟悉Javascript中的setInterval和setTimeout,在Javasc ...
随机推荐
- jquery file upload 文件上传插件
1. jquery file upload 下载 jquery file upload Demo 地址:https://blueimp.github.io/jQuery-File-Upload/ jq ...
- linux bash快捷键
bash快捷键 CTRL+F 光标向前移动一个字母 CTRL+B 光标向后移动一个字母 CTRL+A HOME CTRL+E END
- 导出db2数据库的表结构和数据(转载)
对于db2数据库,导入和导出表结构和数据其实很简单,只需要用到db2look和db2move两个命令即可.这两个命令都需要在客户端的命令行处理器 中执行,但对于数据库服务器和客户端不在同一机器上的 ...
- ASP.NET MVC学习系列(一)-WebAPI初探
由于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直在看相关的书或文章.因为之前在大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过在后来工作以后主 ...
- 你不知道的Java类
1.StrSubstitutor StrSubstitutor是一个很特殊的类,在String中使用${key}的方法在形成了一个可配置的模板,new一个HashMap使用HashMap替换Strin ...
- word2013 blog test
测试一:style里的内容能保存吗?: int read; byte * buf; int tries; int read; byte * buf ...
- 如何在iPhone与iPad上开启firebug
原文: MARTIN KOOL games - web - dad - sarien.net - q42 - livejs - handcraft How to use Firebug on your ...
- zabbix通过API创建交换机模板,ifAdminStatus;ifOperStatus;ifInUcastPkts;ifAlias
最终效果: 目的: 通过zabbix的Latest data查看主机就可以看到其监控结果. 监控项: # 管理状态 IF-MIB::ifAdminSt ...
- Java中byte与16进制字符串的互相转换
* Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串. * @param s ...
- php中的访问修饰符 private、protected、public的作用范围
1. private 只能在类内部使用 2. protected 可以在类内部和继承类里使用.类外部不能使用[即实例化后的对象无法调用] 3. public 全部范围适用. 4.子类复写父类中的方法时 ...