T1 [JZOJ3490] 旅游(travel)

题目描述

  ztxz16如愿成为码农之后,整天的生活除了写程序还是写程序,十分苦逼。终于有一天,他意识到自己的生活太过平淡,于是决定外出旅游丰富阅历。

  ztxz16生活的城市有N*M个景点,可以描述成一个N*M的矩形,每个景点有一个坐标(x, y) (1 <= x <= N, 1 <= y <= M)以及美观度A[x][y]和观赏所需的时间B[x][y],从一个景点(x1, y1)走到另一个景点(x2, y2)需要时间为它们之间的曼哈顿距离:|x1 - x2| + |y1 - y2|。

  为了防止审美疲劳,ztxz16希望观赏的景点的的美观度是严格上升的,由于不想太早回家码代码,ztxz16希望旅游的总时间尽可能长。

数据范围

  对于 $30\%$ 的数据,$1 \leq N,M \leq 50$

  对于 $60\%$ 的数据,$1 \leq N,M \leq 300$

  对于 $100\%$ 的数据,$1 \leq N,M \leq 1000$,$0 \leq A \leq 10^6$,$0 \leq B \leq 10^9$

分析

  数据较水,$O(n^2m^2)$ 可以过,暂没写出 $O(nm)$ 做法

T2 [JZOJ3491] 做梦(dream)

题目描述

  ztxz16旅游归来后十分疲倦,很快就进入了梦中。

  在梦中ztxz16结婚生子了,他不得不照顾小宝宝。但这实在太无聊了,于是ztxz16会在散步。梦中ztxz16住在一个类似数轴的街上,数轴上的每个整点是一个街区,每个单位时间内ztxz16可以选择向左走一个街区或者向右走一个街区,但如果他离开家超过m个单位时间小宝宝会有危险,因此ztxz16必须在距离上次在家中不超过m个单位时间内回到家中。n个单位时间后ztxz16会醒来,他希望此时正好在家中。

  ztxz16想知道散步过程可能有多少种不同的散步过程。两个散步过程被认为不同,当且仅当存在至少一个单位时刻ztxz16选择的走向不同。

数据范围

  对于 $30\%$ 的数据,$2 \leq N \leq 100$,$2 \leq M \leq 100$

  对于 $100\%$ 的数据,$2 \leq N \leq 10^9$,$2 \leq M \leq 100$

  $N$ 和 $M$ 均为偶数

分析

  看到数据,很容易想到矩阵乘法

  设 $f[i][j]$ 表示不经过起点走 $i$ 步到达 $j$ 位置的不同路径数

  于是可以推出初始矩阵为 $$\begin{bmatrix} 0 & 0 & \cdot\cdot\cdot & 0 & f[\frac{m}{2}]\\ 1 & 0 & \cdot\cdot\cdot & 0 & f[\frac{m}{2}-1]\\ 0 & 1 & \cdot\cdot\cdot & 0 & f[\frac{m}{2}-2]\\ \cdot\cdot\cdot & \cdot\cdot\cdot & \cdot\cdot\cdot & \cdot\cdot\cdot & \cdot\cdot\cdot\\ 0 & 0 & \cdot\cdot\cdot & 0 & f[2]\\ 0 & 0 & \cdot\cdot\cdot & 1 & f[1] \end{bmatrix}$$

  然后只需要求出矩阵 $\frac{n}{2}$ 次幂的最后一项就可以了

  (关于这样转移的原因,手推一下前几个矩阵找出最后一项的形成规律就好了,而且也会明白为什么 $f$ 数组记录的是不经过起点的路径数)

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f int n, m, ans;
int f[][];
int p = 1e9 + ; struct Mat {
int t[][];
Mat() {memset(t, , sizeof t);}
} x; Mat Mul(Mat a, Mat b) {
Mat c;
for (int i = ; i <= m; i++)
for (int j = ; j <= m; j++)
for (int k = ; k <= m; k++)
c.t[i][j] = (c.t[i][j] + (ll)a.t[i][k] * b.t[k][j] % p) % p;
return c;
} Mat Pow(Mat a, int b) {
Mat c;
for (int i = ; i <= m; i++) c.t[i][i] = ;
while (b) {
if (b & ) c = Mul(c, a);
a = Mul(a, a); b >>= ;
}
return c;
} int main() {
scanf("%d%d", &n, &m);
n >>= ; m >>= ;
f[][m - ] = f[][m + ] = ;
for (int i = ; i <= (m << ); i++)
for (int j = ; j <= (m << ); j++) {
if (j - != m) f[i][j] = (f[i][j] + f[i - ][j - ]) % p;
if (j + != m) f[i][j] = (f[i][j] + f[i - ][j + ]) % p;
}
for (int i = ; i <= m; i++) x.t[i][i - ] = ;
for (int i = ; i <= m; i++) x.t[m + - i][m] = f[i << ][m];
x = Pow(x, n);
printf("%d", x.t[m][m]); return ;
}

T3 [JZOJ3492] 数数(count)

题目描述

  ztxz16从小立志成为码农,因此一直对数的二进制表示很感兴趣。今天的数学课上,ztxz16学习了等差数列的相关知识。我们知道,一个等差数列可以用三个数A,B,N表示成如下形式:

  B + A, B + 2 * A, B + 3 * A, ..., B + N * A

  ztxz16想知道对于一个给定的等差数列,把其中每一项用二进制表示后,一共有多少位是1,但他的智商太低无法算出此题,因此寻求你的帮助。

数据范围

  对于 $30\%$ 的数据,$1 \leq T \leq 20$,$1 \leq A \leq 10^4$,$1 \leq B \leq 10^{16}$,$1 \leq N \leq 10^3$

  对于 $60\%$ 的数据,$1 \leq T \leq 20$,$1 \leq A \leq 10^4$,$1 \leq B \leq 10^{16}$,$1 \leq N \leq 10^9$

  对于 $100\%$ 的数据,$1 \leq T \leq 20$,$1 \leq A \leq 10^4$,$1 \leq B \leq 10^{16}$,$1 \leq N \leq 10^{12}$

分析

  对于一个二进制数 $x$,它第 $k$ 位上的数为 $\lfloor \frac{x}{2^{k-1}} \rfloor - \lfloor \frac{x}{2^k} \rfloor \times 2$

  所以在等差数列的 $n$ 个数中,第 $k$ 位的总贡献为 $\sum_{i=1}^n \lfloor \frac{b+ai}{2^{k-1}} \rfloor - \lfloor \frac{b+ai}{2^k} \rfloor \times 2$

  最后答案就是每一位上的贡献之和

  对于形如 $f(a,b,c,n)=\sum_{i=0}^n \lfloor \frac{ai+b}{c} \rfloor$ 的式子,我们会使用类欧几里得算法来计算

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f ll T, A, B, N, f[]; ll calc(ll a, ll b, ll c, ll n) {
if (!a) return b / c * (n + );
if (a < c && b < c) {
ll m = (a * n + b) / c;
if (!m) return ;
return n * m - calc(c, c - b - , a, m - );
}
if (n & )
return calc(a % c, b % c, c, n) + (n + ) / * n * (a / c) + (n + ) * (b / c);
return calc(a % c, b % c, c, n) + n / * (n + ) * (a / c) + (n + ) * (b / c);
} int main() {
scanf("%lld", &T);
while (T--) {
ll ans = ;
scanf("%lld%lld%lld", &A, &B, &N);
for (ll i = , j = ; (i >> ) <= B + A * N; i <<= , j++)
f[j] = calc(A, B + A, i, N - );
for (ll i = , j = ; i <= B + A * N; i <<= , j++)
ans += f[j] - (f[j + ] << );
printf("%lld\n", ans);
} return ;
}

2019-08-20 纪中NOIP模拟B组的更多相关文章

  1. 2019-08-21 纪中NOIP模拟A组

    T1 [JZOJ6315] 数字 题目描述

  2. 2019-08-15 纪中NOIP模拟B组

    T1 [JZOJ3455] 库特的向量 题目描述 从前在一个美好的校园里,有一只(棵)可爱的弯枝理树.她内敛而羞涩,一副弱气的样子让人一看就想好好疼爱她.仅仅在她身边,就有许多女孩子想和她BH,比如铃 ...

  3. 2019-08-25 纪中NOIP模拟A组

    T1 [JZOJ6314] Balancing Inversions 题目描述 Bessie 和 Elsie 在一个长为 2N 的布尔数组 A 上玩游戏. Bessie 的分数为 A 的前一半的逆序对 ...

  4. 2019-08-23 纪中NOIP模拟A组

    T1 [JZOJ2908] 矩阵乘法 题目描述 给你一个 N*N 的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第 K 小数. 数据范围 对于 $20\%$ 的数据,$N \leq 100$,$Q ...

  5. 2019-08-20 纪中NOIP模拟A组

    T1 [JZOJ6310] Global warming 题目描述 给定整数 n 和 x,以及一个大小为 n 的序列 a. 你可以选择一个区间 [l,r],然后令 a[i]+=d(l<=i< ...

  6. 2019-08-13 纪中NOIP模拟B组

    T1 [JZOJ1534] rank 题目描述 小h和小R正在看之前的期末&三校联考成绩,小R看完成绩之后很伤心,共有n个学生,第i个学生有一个总成绩Xi,因为他的排名是倒数第k个,于是小R想 ...

  7. 2019-08-12 纪中NOIP模拟B组

    T1 [JZOJ4879] 少女觉 题目描述 “在幽暗的地灵殿中,居住着一位少女,名为古明地觉.” “据说,从来没有人敢踏入过那座地灵殿,因为人们恐惧于觉一族拥有的能力——读心.” “掌控人心者,可控 ...

  8. 2019-08-10 纪中NOIP模拟B组

    T1 [JZOJ1235] 洪水 题目描述 一天, 一个画家在森林里写生,突然爆发了山洪,他需要尽快返回住所中,那里是安全的. 森林的地图由R行C列组成,空白区域用点“.”表示,洪水的区域用“*”表示 ...

  9. 2019-08-07 纪中NOIP模拟B组

    T1 [JZOJ1385] 直角三角形 题目描述 二维平面坐标系中有N个位置不同的点. 从N个点选择3个点,问有多少选法使得这3个点形成直角三角形. 数据范围 $3 \leq N \leq 1500$ ...

随机推荐

  1. RJM8L151F6P6温度枪方案对比

    疫情当下,温度计.呼吸机.监护仪.制氧机等医疗产品的生产供应至关重要,红外温度计属于非接触式测温,它是利用物体热辐射与物体温度之间的关系来工作的. 红外测温仪是一种将红外技术与微电子技术相结合的新型温 ...

  2. Mock模拟数据,前后端分离

    安装 使用npm安装: npm install mockjs; 或直接<script src="http://mockjs.com/dist/mock.js">< ...

  3. 你一定看得懂的 DDD+CQRS+EDA+ES 核心思想与极简可运行代码示例

    前言 随着分布式架构微服务的兴起,DDD(领域驱动设计).CQRS(命令查询职责分离).EDA(事件驱动架构).ES(事件溯源)等概念也一并成为时下的火热概念,我也在早些时候阅读了一些大佬的分析文,学 ...

  4. css中的盒子模型是什么?

    什么是CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周 ...

  5. python filter函数(40)

    一.filter函数简介 filter函数主要用来筛选数据,过滤掉不符合条件的元素,并返回一个迭代器对象,如果要转换为列表list或者元祖tuple,可以使用内置函数list() 或者内置函数tupl ...

  6. hadoop学习摘要

    参考链接:https://www.zhihu.com/question/333417513 https://www.oschina.net/p/hbase hadoop环境搭建:https://blo ...

  7. TNS-01189 During Listener Monitoring Using Enterprise Manager

    oracle 12.2 RAC监听日志报错:15-JAN-2020 22:27:53 * (CONNECT_DATA=(COMMAND=VERSION)) * version * 1189TNS-01 ...

  8. zabbix | 离线安装agent

    zabbix | 离线安装agent 环境 centos6.7 zabbix-server 3.4 步骤 1. 下载rpm包 首先下载支持的插件 yum install yum-plugin-down ...

  9. P3983 赛斯石(赛后强化版)

    链接:Miku ------------- 题目描述一脸懵逼 ------------ 这道题本质上是两个完全背包而已.首先,对于每个船,他所能装的最大货物价值是一定的, 我们可以跑完全背包求出每艘船 ...

  10. 使用elementui树形控件写项目小结

    使用tree pagination serch table 实现功能 项目难点主要解析后台传递的代码,线性转树形,这儿加上一个大神的解析 https://blog.csdn.net/dandanzmc ...