NOI2013 Day2

矩阵游戏

题目描述:设矩阵\(F\)



求\(F[n][m](mod (10^9+7))\)

solution:

这题可以求通项解决。

设\(X_i=F[i][m]\),

\((a-1)X_1=a^{m-1}((a-1)+b)-b\)

令\(P=10^9+7\),\(P\)是公认的质数,所以运用费马小定理:

\(a^{P-1} \equiv 1 (mod P)\)

设\(m-1=kP+z\),则\(a^{m-1} \equiv a^z(mod P)\)

算出右式,然后再用费马小定理处理除法,求出\(X_1\)

\((a-1)X_{i+1}=a^{m-1}((cX+d)(a-1)+b)-b\)

化简得:

\((a-1)X_{i+1}=a^{m-1}(a-1)cX+a^{m-1}((a-1)d+b)-b\)

形如:\((a-1)X_{i+1}=AX_i+B\)

求通项。求出\(X_n\)

这题也可以用矩阵乘法,将矩阵乘法的二进制变成十进制就好了。

时间复杂度:\(O(n)\)

书法家

题目描述:在一个\(n\)行\(m\)列的矩阵中,每个格有对应的值,现在矩阵中画\('NOI'\),下面给出三个书法字的定义:

1、 \(’N’\)由若干 (\(\geq 3\)) 个边平行于坐标轴的矩形组成,设由\(K\)个矩形组成(标号\(1 ~ K\)),第\(i\)个矩形的左下角\(方格\)坐标设为\((L_i, B_i)\),右上角坐标设为\((R_i, T_i)\),要求满足:

a) \(L_i \leq R_i,B_i \leq T_i\)

b) 对任意\(1 < i \leq K\),有\(L_i= R_{i−1} + 1\);

c) 对任意\(3 \leq i < K\),有\(B_{i-1}− 1 \leq T_i \leq T_{i−1}\),\(B_i \leq B_{i−1}\);

d) \(B_2 > B_1, T_2 = T_1, B_{K−1} = B_K, T_{K-1} < T_K\);

2、 \(’O’\)由一个大矩形\(A\),挖去一个小矩形\(B\)得到, 这两个矩形的边都平行于坐标轴。 设大矩形 A 左下角的方格坐标为 \((u , v)\), 长为\(W\), 宽为\(H\) , 则小矩形 B 满足左下角方格坐标为\((u + 1, v + 1)\), 长 \(W − 2\),宽\(H − 2\)。 要

求满足:

a) \(W ≥ 3, H ≥ 3\)

b) \(u > R_K + 1\)

3、 \(’I’\)为\(3\)个边平行于坐标轴的从下到上的实心矩形组成,从下到上依次标号为\(1,2,3\),第\(i\)个矩形的左下角格子坐标设为\((P_i, Q_i)\),右上角格子坐标设为\((G_i, H_i)\),要求满足:

a) \(P_i \leq G_i, Q_i \leq H_i\)

b) \(P_1 = P_3 > u + W, G_1 = G_3\)

c) \(Q_1 = H_1 = Q_2 − 1, H_2 + 1 = Q_3 = H_3\)

d) \(P_1 < P_2 \leq G2 < G1\)

求\(‘NOI'\)覆盖的格子的值的和的最大值。

solution

从左到右dp,\(N,O,I\)各分成三个阶段,相邻之间有空列,再加两个阶段。\(f[i][j][k]\)表示到第\(i\)个阶段,上界为\(j\),下界为\(k\)的最大值。转移方程有点烦,直接上代码。

时间复杂度:\(O(11mn^2)\)

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <ctime>
#include <cmath>
#include <deque>
#include <queue>
#include <vector>
#include <map>
#include <complex>
using namespace std; const int maxn=160;
const int maxm=510;
const int oo=int(1e9);
typedef int arr[maxn][maxm]; int n, m, ans;
int a[maxn][maxm], sum[maxn][maxm];
int f[2][12][maxn][maxn], g[12][maxn][maxn]; void init()
{
scanf("%d%d", &n, &m);
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
scanf("%d", &a[i][j]);
for (int j=1; j<=m; ++j)
for (int i=1; i<=n; ++i)
sum[i][j]=sum[i-1][j]+a[i][j];
}
void calc_g()
{
for (int i=1; i<=n; ++i)
for (int j=n; j>=i; --j)
g[1][i][j]=max(g[1][i][j+1], f[0][1][i][j+1]); for (int j=1; j<=n; ++j)
for (int i=1; i<=j; ++i)
g[2][i][j]=max(g[2][i-1][j], f[0][2][i][j]); for (int i=1; i<=n; ++i)
{
g[3][i][i-1]=g[2][i-1][i-1];
for (int j=i; j<=n; ++j)
g[3][i][j]=max(g[3][i][j-1], g[2][i][j]);
} for (int j=1; j<=n; ++j)
for (int i=j; i>=1; --i)
g[4][i][j]=max(g[4][i+1][j], f[0][2][i+1][j]);
}
void solve()
{
for (int k=1; k<=11; ++k)
for (int i=0; i<=n+1; ++i)
for (int j=0; j<=n+1; ++j)
f[0][k][i][j]=g[k][i][j]=-oo;
ans=-oo;
for (int i=1; i<=m; ++i)
{
calc_g();
f[1][4][1][1]=f[0][4][1][1];
f[1][8][1][1]=f[0][8][1][1];
for (int j=1; j<=n; ++j)
for (int k=j; k<=n; ++k)
{
int tmps=sum[k][i]-sum[j-1][i];
int tmpa=a[j][i]+a[k][i]; //N:
f[1][1][j][k]=max(f[0][1][j][k], 0)+tmps;
f[1][2][j][k]=max(g[1][j][k], g[3][j][k])+tmps;
f[1][3][j][k]=max(g[4][j][k], f[0][3][j][k])+tmps; f[1][4][1][1]=max(f[1][4][1][1], f[0][3][j][k]); //O:
if (j+1<k)**注意题目**
{
f[1][5][j][k]=f[0][4][1][1]+tmps;
f[1][6][j][k]=max(f[0][5][j][k], f[0][6][j][k])+tmpa;
f[1][7][j][k]=f[0][6][j][k]+tmps;
f[1][8][1][1]=max(f[1][8][1][1], f[0][7][j][k]);
} //I:
if (j+1<k)**注意题目**
{
f[1][9][j][k]=max(f[0][8][1][1], f[0][9][j][k])+tmpa;
f[1][10][j][k]=max(f[0][9][j][k], f[0][10][j][k])+tmps;
f[1][11][j][k]=max(f[0][10][j][k], f[0][11][j][k])+tmpa;
ans=max(ans, f[1][11][j][k]);
}
}
for (int j=1; j<=n; ++j)
for (int k=j; k<=n; ++k)
for (int p=1; p<=11; ++p)
{
f[0][p][j][k]=f[1][p][j][k];
f[1][p][j][k]=-oo;
}
}
}
int main()
{
freopen("penman.in", "r", stdin);
freopen("penman.out", "w", stdout);
init();
solve();
printf("%d\n", ans);
return 0;
}

快餐店

题目描述:给出一个只有一个环的连通图,保证环上的点数大于等于\(3\),求一个点(边上或点)到最远的点最近,求这一距离。

solution:

环上的点的子树求直径更新答案,然后求出子树深度作为该点的点权。



枚举快餐店在那一条边\((i)\),环上的点分成了离左端点近,和离右端点近,求出离左端点近的,边权加点权最远的点\((P_1)\)右端点亦然\((P_2)\),求出\(W=P_1->P_2(经i的路径边权)+P_1点权+P_2点权\),若\(W/2\),即路径中点在\(i\)上,则用\(W/2\)更新答案,否则左端点和右端点更新答案(因为要求快餐店在\(i\)上)

至于如何求最远点,按某一时针枚举边,左边和右边的单调性是不变的,因为只是多了一条边和少了一条边,所以可以用单调队列维护。

时间复杂度:\(O(n)\)

NOI2013 Day2的更多相关文章

  1. 【从零开始学BPM,Day2】默认表单开发

    [课程主题]主题:5天,一起从零开始学习BPM[课程形式]1.为期5天的短任务学习2.每天观看一个视频,视频学习时间自由安排. [第二天课程] Step 1 软件下载:H3 BPM10.0全开放免费下 ...

  2. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  3. day2

    三级菜单: ))))))))))] last_levels.pop() ]]]]]]]]:] information = : ch = msvcrt.getch() ][][: : password= ...

  4. java day2一个模拟双色球的代码

    package day2; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt ...

  5. Python基础-day2

    1.Python模块python 中导入模块使用import语法格式:import module_name示例1: 导入os模块system('dir')列出当前目录下的所有文件 # _*_ codi ...

  6. 【BZOJ 4517】【SDOI 2016 Round1 Day2 T2】排列计数

    本蒟蒻第一次没看题解A的题竟然是省选$Round1$ $Day2$ $T2$ 这道组合数学题. 考试时一开始以为是莫队,后来想到自己不会组合数的一些公式,便弃疗了去做第三题,,, 做完第三题后再回来看 ...

  7. 冲刺阶段 day2

    day2 项目进展 今天本组五位同学聚在一起将项目启动,首先我们对项目进行了规划,分工,明确指出每个人负责哪些项目.由负责第一部分的组员开始编程,在已经搭建好的窗体内,对系部设置进行了编写,本校共六个 ...

  8. python_way ,day2 字符串,列表,字典,时间模块

    python_way ,day2 字符串,列表,字典,自学时间模块 1.input: 2.0 3.0 区别 2.0中 如果要要用户交互输入字符串: name=raw_input() 如果 name=i ...

  9. 二模 (8) day2

    第一题: 题目描述: 有 n 个炸弹,有些炸弹牵了一根单向引线(也就是说引线只有在这一端能被炸弹点燃),只要引爆了这个炸弹,用引线连接的下一个炸弹也会爆炸.每个炸弹还有个得分,当这个炸弹被引爆后就能得 ...

随机推荐

  1. class属性多个样式的用法

    今天看到一个非常好用的样式用法,给已经在睡梦中苏醒的你们来一段代码头脑风暴.大家都知道现在div+css布局的使用已经不是可以用潮流来概括的了,换个词应该是:普及.以前的表格布局现在是少之极少,因为表 ...

  2. 修改默认的undo_retention参数设置

    昨天,一个朋友的数据库数据被误操作删除掉了,请求我帮忙进行恢复. 数据库版本是Oracle10g Release 2的,我首先想到的是使用Flashback Query进行闪回恢复,不幸的是ORA-0 ...

  3. 论山寨手机与Android 【12】3G时代SmartPhone BP部分

    最成熟的3G网络系统,是3GPP项目组制订的WCDMA.WCDMA的网络结构,可参考Figure 12.1,其中有几个特点. 1. 反向兼容GSM/GRPS网络. 原有GSM网络的基站子系统(BSS) ...

  4. HDU4738【杭州网赛、判桥】

    刚拿到这道题时挺有思路,无奈平日里只敲过找割顶的代码,判桥的代码当时自己也没仔细敲. 当时一把泪啊,忽然感觉自己的图论才只是刚搞了个起步啊.. 题目有神坑.    就是先判是否连通,不连通直接输出0; ...

  5. Eclipse 快捷键操作和常用设置

    自动提示功能:一般的关键字,都有提示内容 像syso 就是System.out.println();for 循环 等 它的快捷键是 (Alt+/) 格式化代码: 有时候代码写多了 比较乱的话可以用快捷 ...

  6. AndroidUI 引导页面的使用

    一个应用程序都少不了欢迎页面和引导页面,本文主要讲如何制作一个引页面: 首页所有的目录结构: 新建Welcome引导页面和Activity: <RelativeLayout xmlns:andr ...

  7. 网易云课堂_程序设计入门-C语言_第三周:循环_2数字特征值

    2 数字特征值(5分) 题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作 ...

  8. o​r​a​l​c​e​ ​D​B​A​ ​培​训_lesson06

    控制文件 -小型二进制文件 -定义物理数据库的当前状态 -丢失控制文件须要修复 -维护数据库的完整性 -要求: 1.在启动数据库时处于mount状态 2.可以操作数据库 -仅仅链接至一个数据库 -最初 ...

  9. 404 Not Found The requested URL * was not found on this server

    1. 把从SVNcheckout下来的代码搭建起来.CakePHP+mysql.改动数据库配置. 2. 配置虚拟主机,发现訪问不了/user/login这个URL,报这个错误:404 Not Foun ...

  10. ASP.NET MVC4 json序列化器

    ASP.NET MVC4中调用WEB API的四个方法 2012年06月07日00:05 it168网站原创 作者:廖煜嵘 编辑:景保玉 我要评论(0) [IT168技术]当今的软件开发中,设计软件的 ...