matrix

找规律

题意:给定一个 N*N 的只有 0 和 1 的矩阵,有 Q 个操作,分三种:1. 将某行上的所有数字取反;2. 将某列上的所有数字取反;3. 输出 sum{ a[i][j]*a[j][i] } mod 2。N <=1000,Q<=5*10^5。

解法:初看题目会觉得很棘手。然后可以发现,对于不在对角线上的点,a[i][j]*a[j][i] 会被累加两次(一次是在计算 (i, j) 时,另一次是在计算 (j, i) 时),由同余定理可知,无论 a[i][j] 或 a[j][i] 的值为多少,都不会影响到求余的结果。所以对角线上的 a(i, i) 才是影响结果的关键。当对角线上的 1 的个数为奇数时,答案就为 1;否则为 0。那么我们可以设一个变量 ans,ans 的初始值由扫描初始矩阵得到。每进行一次 1 或 2 操作,就将 ans 取反。遇到 3 操作直接输出即可。

 

steins

贪心

题意:给出一些顺序排列的长短不一的矩形,宽度都为 1,要用宽度为 1 的刷子进行横向或竖向填充,问最小填充次数使得所有矩形被完全填充。

初步解法:一个只能骗很少部分分的算法:每次选择高度最小的矩形,记其高度为 h,分别向左右进行横向填充,则这一步的填充次数为 h。不断重复此步骤。这种算法完全抛弃了竖向的填充方式,很明显拿不了多少分数。

正解:不算严格意义上的贪心,有点像贪心和动规的结合。对于区间 [l, r],找到区间内的最小高度 h,此时有两种决策:1. 用横向方式填充最短矩形,然后递归两个子区间;2. 用纵向方式填充区间内所有矩形。计算出两种决策分别的花费,取其较小值。

 

archer

扫描线+线段树

题意:求矩形并的面积。

初步解法:模拟。出题人很良心地给了 30 分。

正解:其实是很经典的题目,之前在书上也看到过类似的求矩形并的周长的方法(POJ 的 Picture 一题),但是从来没写过。

假设有一条扫描线,从左往右扫描,遇到矩形的入边就将其投影到线段树上,遇到矩形的出边就将其从线段树上删去。每次累加扫描到的相邻两条线段的横坐标之差与线段树上的总线段长度的乘积。

上面这段话很笼统,更详细地说:

  1. 将题目给的每个矩形拆分成左右两条边,记录边的长度、横坐标、是入边还是出边,并将所有边排序;
  2. 顺序枚举每条边,如果是入边就将其插入到线段树,如果是出边就将其从线段树中删除,具体实现:
    1. 为线段树的每个结点增加两个域:cover 与 total。cover 表示该线段(注意只是本结点而不包含子树)被完整地覆盖了多少次,total 表示该线段内 cover>0 的线段总长度;
    2. 每次插入一条线段,就将其对应的线段树结点的 cover 加 1;删除一条线段则反之。那么 cover>0 就表示该结点对应的线段被完全覆盖,则其 total = right-left;如果 cover=0 就表示该结点对应的线段没有被完全覆盖,但是有可能被部分覆盖,则其 total 由左右子树累加得到;
  3. 插入(删除)一条边后累加答案,累加的值为:本次扫描到的边的横坐标减去上次扫描到的边的横坐标乘以目前线段树中被覆盖的线段总长度,即 ans += (x(i)-x(i-1))*root.total。

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

  1. 省常中模拟 Test2 Day2

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

  2. 省常中模拟 Test3 Day1

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

  3. 省常中模拟 day2

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

  4. 省常中模拟 day1

    第一题: 题目大意: 给出N个数的数列,如果相邻的两个数加起来是偶数,那么就可以把这两个数消掉,求最多能消掉多少数. 解题过程: 1.先自己手工模拟了几组数据,发现不管消除的顺序如何,最终剩下的是一定 ...

  5. 省常中模拟 Test4

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

  6. 省常中模拟 Test1 Day1

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

  7. CH Round #55 - Streaming #6 (NOIP模拟赛day2)

    A.九九归一 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2355%20-%20Streaming%20%236%20(NOIP模拟赛day2)/九九归一 题 ...

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

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

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

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

随机推荐

  1. PHP之preg_replace()与ereg_replace()正则匹配比较讲解

    <?php //preg_replace()和ereg_replace()函数的使用的比较 // -------preg_replace()-------------------------- ...

  2. 使用zend studio配置Xdebug调试PHP教程

    这里看过上面的文章后写一下自己的想法. 最近安装了zend studio 10.5,下载了破解文件.开始是下载了10.0的版本,但是注册码不正确.所以只能安装最新的10.5了. 接下来进行PHP代码调 ...

  3. HTML中动态图片切换JQuery实现

    相信很多同学都注意到了,各大新闻或者娱乐网站都含有动态图片切换,那个漂亮的感觉让刚刚学习html的人,都非常好奇和心动.那下面就让我们看一下到底如何实现动态图片切换呢?看一下百度贴吧的效果图吧~ // ...

  4. 总结:Unity3D游戏上线后的流程回顾

    原地址:http://unity3d.9tech.cn/news/2014/0127/39748.html 首先.unity 灯光烘焙 :Unity 3d FBX模型导入.选项Model 不导入资源球 ...

  5. LightOj 1096 - nth Term (矩阵快速幂,简单)

    题目 这道题是很简单的矩阵快速幂,可惜,在队内比赛时我不知什么时候抽风把模版中二分时判断的 ==1改成了==0 ,明明觉得自己想得没错,却一直过不了案例,唉,苦逼的比赛状态真让人抓狂!!! #incl ...

  6. POJ 1701

    /* Every tenant went up N floors would make the dissatisfied degree rise N * a + 0.5 * N * (N - 1) d ...

  7. hdu 2177 取(2堆)石子游戏 博弈论

    由于要输出方案,变得复杂了.数据不是很大,首先打表,所有whthoff 的奇异局势. 然后直接判断是否为必胜局面. 如果必胜,首先判断能否直接同时相减得到.这里不需要遍历或者二分查找.由于两者同时减去 ...

  8. 130701基础练习-first

    // 629.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h"//#include <iostream.h> class Point ...

  9. PHP设计模式——代理模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 代理模式为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和 ...

  10. Windows下获取高精度时间注意事项

    Windows下获取高精度时间注意事项 [转贴 AdamWu]   花了很长时间才得到的经验,与大家分享. 1. RDTSC - 粒度: 纳秒级 不推荐优势: 几乎是能够获得最细粒度的计数器抛弃理由: ...