2019-08-12 纪中NOIP模拟B组
T1 [JZOJ4879] 少女觉
题目描述
“在幽暗的地灵殿中,居住着一位少女,名为古明地觉。”
“据说,从来没有人敢踏入过那座地灵殿,因为人们恐惧于觉一族拥有的能力——读心。”
“掌控人心者,可控天下。”
人的记忆可以被描述为一个黑块(B)与白块(W)的序列,其中情感值被定义为序列中黑块数量与白块数量之比。
小五口在发动读心术时,首先要解析人的记忆序列,因此,需要将序列分割为一些段,并且要求每一段记忆序列的情感值都相等。
下面给出两个例子:
BWWWBB -> BW + WWBB (Ratio=1:1)
WWWBBBWWWWWWWWWB -> WWWB + BBWWWWWW + WWWB (Ratio=3:1)
现在小五手上有一个人的记忆序列,她想要知道,如何将手中的记忆序列分成尽可能多的段呢?
数据范围
对于 $10 \%$ 的数据,$N \leq 15$
对于 $20 \%$ 的数据,$N \leq 500$
另有 $30 \%$ 的数据,$K=1$
另有 $30 \%$ 的数据,$K \leq 50$
对于 $100 \%$ 的数据,$N \leq 10^5$,序列长度不超过 $10^9$
分析
显然每段序列的黑白块之比都等于总序列的黑白块之比
所以只要在每加入一段相同颜色的连续方块时,判断是否能组成一段新的合法序列
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 100005 int T, n, ans;
int s[N][], sum[], last[];
char c; int gcd(int a,int b) {
return !b ? a : gcd(b, a % b);
} int main() {
freopen("silly.in", "r", stdin);
freopen("silly.out", "w", stdout);
scanf("%d", &T);
while (T--) {
ans = sum[] = sum[] = last[] = last[] = ;
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d %c", &s[i][], &c);
if (c == 'B') s[i][] = , sum[] += s[i][];
if (c == 'W') s[i][] = , sum[] += s[i][];
}
if (!sum[]) {printf("%d\n", sum[]); continue;}
if (!sum[]) {printf("%d\n", sum[]); continue;}
int g = gcd(sum[], sum[]);
sum[] /= g; sum[] /= g;
for (int i = ; i <= n; i++) {
int now = s[i][];
if (!last[now ^ ] || last[now ^ ] % sum[now ^ ]) {
last[now] += s[i][]; continue;
}
int need = last[now ^ ] / sum[now ^ ] * sum[now] - last[now];
if (need < ) last[now] += s[i][];
else if (s[i][] < need) last[now] += s[i][];
else last[now] = s[i][] - need, last[now ^ ] = , ans++;
}
printf("%d\n", ans);
} return ;
}
T2 [JZOJ4883] 灵知的太阳信仰
题目描述
“在炽热的核熔炉中,居住着一位少女,名为灵乌路空。”
“据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量——核能。”
“核焰,可融真金。”
每次核融的时候,空都会选取一些原子,排成一列。然后,她会将原子序列分成一些段,并将每段进行一次核融。
一个原子有两个属性:质子数和中子数。
每一段需要满足以下条件:
1、同种元素会发生相互排斥,因此,同一段中不能存在两个质子数相同的原子。
2、核融时,空需要对一段原子加以防护,防护罩的数值等于这段中最大的中子数。换句话说,如果这段原子的中子数最大为x,那么空需要付出x的代价建立防护罩。求核融整个原子序列的最小代价和。
数据范围
对于 $20\%$ 的数据,$1 \leq N \leq 100$
对于 $40\%$ 的数据,$1 \leq N \leq 1000$
对于 $100\%$ 的数据,$1 \leq N \leq 10^5$
分析
考场上的想法是记录每个数作为区间末端时可以达到的区间最前端,用 $ST$ 表维护区间最大值,然后在可行范围内枚举断点 $DP$ 得到答案
这样的做法是 $O(n^2)$ 的,所以考虑在枚举断点时如何优化
我们发现每个位置的 $f$ 值只可能从中子数大于等于自身的位置的前一个原子或者是可以达到的最前端位置的前一个原子处转移过来,所以可以维护一个中子数非严格递减的单调队列,将队列中的每个位置对应的答案放入 $set$ 中,这样就便于插入删除元素和查找最小值,操作时间复杂度 $O(log \; n)$
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <set>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 100005 int n, l = , r = ;
int a[N], b[N], pos[N], pre[N];
int f[N], q[N], p[N];
multiset<int> s; int main() {
freopen("array.in", "r", stdin);
freopen("array.out", "w", stdout);
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d%d", a + i, b + i);
pre[i] = max(pre[i - ], pos[a[i]] + );
pos[a[i]] = i;
}
memset(f, 0x3f, sizeof f); f[] = ;
for (int i = ; i <= n; i++) {
while (l <= r && p[l] < pre[i]) s.erase(q[l]), l++;
while (l <= r && b[p[r]] < b[i]) s.erase(q[r]), r--;
p[++r] = i; q[r] = f[p[r - ]] + b[i]; s.insert(q[r]);
s.erase(q[l]); s.insert(q[l] = f[pre[i] - ] + b[p[l]]);
f[i] = *s.begin();
}
printf("%d\n", f[n]); return ;
}
T3 [JZOJ4882] 多段线性函数
题目描述
数据范围aaarticlea/png;base64,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XLky773P8bXXKRo5rcMF77Tk8/1kwdt3C6d7f4J3ugomO1/wNsrwej52SuIlUex3KHgHnxbB21Xb86JcwdsLMzq8CcHblbiCd1BZtkRll0TBW/B21d68K1fw9s6kxXxDgncxC2qLE7wF74KfLXnertqeF+UK3l6Y0eFNCN6uxBW8BW/B21XryoNyBe88MHJatyh4pyVfAScL3oK34O2qdeVBuYJ3Hhg5rVsUvNOST/AOKZ/mvOOFUtg85MOTn4cJ3vlp9/B3LXiH1yq1I+V5y/OW551am9HRAQUEbz0OBSsgeLt6QgRvwVvwdtW68qBcwTsPjJzWLQreacmnsHlI+RQ2V9g85KOiw4wCgreeBHne2XkG5HkHdWdv1BNOOIF91rTDmpVFc97ZaZkRuargXaihDh48uHLlyt9//z3mSHZ1nDFjxvz58/ft2xfzr19++WXhwoX4rMgb86///ve/a9aseeWVVz799NP4MgutTOYPkOftSnPB2yi7evXqW265pWHDhkcccUSlSpXatGnz2GOP/fzzz650j065gnd0bJWFmuYzvL/55pvevXtPmDAhoe6//vrr+++/P3LkyLPPPpuOZc+ePfYwADx58uTrr7/+iy++WLFixTXXXDNr1iy+NAesXbu2Xbt2fLN58+YBAwbgS9iOaP/+/T169Hj44YeR/eWXX7766qs3bdqUBauncknBOxW1UjlW8E5FrXw8VvDOR6uHvuf8hDe+L2P9pk2bQqbffvstoVp79+41Oy7zQutzzjknCO9Vq1Y1aNDgyy+/NCfyJweYP/HC27ZtO3r0aPMv/mzduvULL7wA2vk89dRTV111Fa48/+LPYcOGMQIwf+bsR/B2ZRrB25WyvpQrePtiSSf3kVfwhpfAGH+3ZcuW77777qFDhwrVlGM6d+4chDdTcn379m3cuLGNlu/atYsDBg8eTPkLFiygxeGOm5I5eODAgY0aNfrpp5927tx51llnERG0PvrixYurVatGlQqtRhYPELxdiS94u1LWl3IFb18s6eQ+IgFvsEcuqrn/7du3b9myxfIvpCgweN68ea1atbryyiuXLl0a/vR4eMNsyI17bV12XOfmzZtfdtll/DJkyBBebBgMhj/99NNM5PHmJCbOjznmmPHjx9s6EwCoUKGCddND3kuGDxO8XQkueLtS1pdyBW9fLOnkPnIf3hs2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EMHbKLtr1y7m/p988kk2SsTn7tix4z/+8Y+UXtzrykLZLlfwzrYFcvr6gndOmycHKid4uzKC4I2yAJv3FvCeH/syEl7JN3XqVO3egDiCt6u250W5grcXZnR4E4K3K3EFb5TlfUG8s4+38yZ8e4Er6SNSruAdEUNlp5qCd3Z0j85VBW9XthK8UZbXiB1zzDGsR+TVvIMHD7733nufe+45ud3mmRO8XbU9L8oVvL0wo8ObELxdiSt4o+yCBQtYzXzeeectX76cP8lTQxbemyt+C96uGp4v5QrevljS1X0I3q6UFbxR9p133ildunSbNm1sevm0adPKly+/aNEiV7pHp1x53tGxVRZqKnhnQfRIXVLwdmUuwRtl33///SOPPLJnz572vfdz584F54899hi5bK6kj0i5gndEDJWdagre2dE9OlcVvF3ZSvBG2Y0bNx533HG9e/e28J43b16ZMmWY/LbfuDJAzpcreOe8ibJZQcE7m+pH4dqCtysrCd4ou2/fvqZNm9500012V7U333wTeL/00kuudI9OuYJ3dGyVhZoK3lkQPVKXFLxdmUvwRlli4xMmTGjQoMEPP/zAn3jbDz300Omnn/7999+70j065Qre0bFVFmrqE7w//PBDBvFVq1Zl1UkWpPT0koK3K8MK3kZZUtV69eqF8832LKNHj27evPmKFStciR6pcgXvSJkr05X1Cd5o98knn1SpUmXhwoWZ1tHf6wnermwreFtl8b/Xrl07efJkkswPHDjgSvGolSt4R81iGa2vZ/DmpdQnnnii3Wkxo1J6ejHB25VhBW9XyvpSruDtiyWd3IdP8D506NCtt956+eWXa4OHYnxWBO9iFPMvRQnerpT1pVzB2xdLOrkPn+C9c+fOM88889FHH83AAlHGB5s2bTIZssT51q9f7+vezIK3k4ZHoYK3K2V9KVfw9sWSTu7DJ3ivWrWKJaPz5893olSg0IMHD/ICQ16GdNlll82aNevxxx9nxNC4ceMtW7a4vnTmyxe8XWkueLtS1pdyBW9fLOnkPnyCN0nmxx9//NatW8MoRYx94MCBRxxxRInkn7/97W8333xzvEtNMuzMmTPXrFlToUKFu+++G5bfeeedderUEbyTKV8ijEny7RjBO98snur9Ct6pKpZXx3sDbyLYHTt2ZI/k4IT3/v37cYs3bNhQvDbFuWdjqOnT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" alt="" width="660" height="315" />
分析
通过人类智慧发现,$f_{min}(y)$ 是一个单峰函数,所以可以三分查找
但是,这题有一个优美的解法,就是把所有端点一起排序后取中间两个点为答案
同时,我有一个通俗易懂的证明
对于该答案区间,区间左右两侧的点数量一定相同
而题目中所给的所有区间,与答案区间一共有三种关系,分别是在答案区间左侧,在答案区间右侧,和包含答案区间
由于包含答案区间的区间的两端点一定分别在答案区间两侧,所以对两侧点数量关系没有影响
所以剩下的点一定是在答案区间左/右侧的区间的端点
这就很显然了,左右两侧的区间数量一定是相等的
对于一个动点,如果两侧区间数相等,那么它到所有区间的距离之和一定是不变的
当它向一侧不断移动时,与移动方向相同的一侧的区间数减少,反方向一侧的区间数增多,那么它到所有区间的距离之和是在不断变大的
所以,中间两点组成的区间一定是答案最优的区间
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 100005 int n;
int p[ * N]; int main() {
freopen("linear.in", "r", stdin);
freopen("linear.out", "w", stdout);
scanf("%d", &n);
for (int i = ; i <= n; i++)
scanf("%d%d", p + (i << ) - , p + (i << ));
sort(p + , p + (n << ) + );
printf("%d %d\n", p[n], p[n + ]); return ;
}
T4 [JZOJ3430] DY引擎
题目描述
BOSS送给小唐一辆车。小唐开着这辆车从PKU出发去ZJU上课了。
众所周知,天朝公路的收费站超多的。经过观察地图,小唐发现从PKU出发到ZJU的所有路径只会有N个不同的中转点,其中有M个点是天朝的收费站。N个中转点标号为1…N,其中1代表PKU,N代表ZJU。中转点之间总共有E条双向边连接。
每个点还有一个附加属性,用0/1标记,0代表普通中转点,1代表收费站。当然,天朝的地图上面是不会直接告诉你第i个点是普通中转点还是收费站的。地图上有P个提示,用[u, v, t]表示:[u, v]区间的所有中转点中,至少有t个收费站。数据保证由所有提示得到的每个点的属性是唯一的。
车既然是BOSS送的,自然非比寻常了。车子使用了世界上最先进的DaxiaYayamao引擎,简称DY引擎。DY引擎可以让车子从U瞬间转移到V,只要U和V的距离不超过L,并且U和V之间不能有收费站(小唐良民一枚,所以要是经过收费站就会停下来交完钱再走)。
DY引擎果然是好东西,但是可惜引擎最多只能用K次。
小唐想知道从PZU开到ZJU用的最短距离(瞬间转移距离当然是按0来计算的)。
数据范围
对于 $30\%$ 的数据,$2 \leq N \leq 30$,$max(0,N-10) \leq M \leq N$,$0 \leq K \leq 10$
对于 $100\%$ 的数据,$2 \leq N \leq 300$,$max(0,N-100) \leq M \leq N$,$E \leq 5 \times 10^4$,$1 \leq P \leq 3 \times 10^3$,$1 \leq L \leq 10^6$,$0 \leq K \leq 30$
分析
B组题难度果然有所提高啊 还有这个D(a)Y(a)??
这题一共分为两个部分,一个是找出所有收费站的位置连这种信息都不给我感到很遗憾,一个是找出最短路
首先题目给定了某两个站点间的收费站数量,这相当于一个差分约束系统
设 $s[i]$ 为从源点到 $i$ 之间的收费站数量,对于每个条件 $[u,v,t]$,有 $s[v]-s[u-1] \geq t$,即 $s[u-1]-s[v] \leq -t$
同时还有一些隐含条件 $s[i]-s[i-1] \geq 0$,即 $s[i-1]-s[i] \leq 0$;$s[i]-s[i-1] \leq 1$
对于每个形如 $v-u \leq w$ 的不等式,就连一条由 $u$ 指向 $v$ 权值为 $w$ 的有向边,然后在图上跑一边 $spfa$
最后得到的 $s[i]-s[i-1]$ 若等于 $1$ ,则说明 $i$ 位置上为收费站,否则为普通中转站
然后在原图上用 $floyd$ 处理出所有点之间不经过收费站的最短路,再把图分为 $K+1$ 层,在相邻两层图之间把最短路小于等于 $L$ 的两点用边权为 $0$ 的有向边连起来,最后用 $spfa$ 找出 $1$ 到 $n$ 的最短路即可
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 302
#define M 50002
#define K 32 int n, m, e, p, l, t, tot, ans = inf;
int to[(M << ) * K], len[(M << ) * K], nxt[(M << ) * K], head[N * K];
int edge[M][], f[N][N], dis[N * K], vis[N * K]; void add(int u, int v, int w) {
to[++tot] = v; len[tot] = w;
nxt[tot] = head[u]; head[u] = tot;
} void spfa(int x, int y) {
memset(dis, 0x3f, sizeof dis);
memset(vis, , sizeof vis);
queue<int> q;
dis[x] = y; q.push(x);
while (!q.empty()) {
int now = q.front(); q.pop(); vis[now] = ;
for (int i = head[now]; i; i = nxt[i])
if (dis[to[i]] > dis[now] + len[i]) {
dis[to[i]] = dis[now] + len[i];
if (!vis[to[i]]) {
vis[to[i]] = ; q.push(to[i]);
}
}
}
} void floyd() {
for (int k = ; k <= n; k++)
if (!(dis[k] - dis[k - ]))
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
if (i != j && i != k && j != k)
f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
} int main() {
scanf("%d%d%d%d%d%d", &n, &m, &e, &p, &l, &t);
memset(f, 0x3f, sizeof f);
for (int i = ; i <= e; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
edge[i][] = u; edge[i][] = v; edge[i][] = w;
f[u][v] = f[v][u] = min(f[u][v], w);
}
for (int i = ; i <= p; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
add(v, u - , -w);
}
for (int i = ; i <= n; i++)
add(i, i - , ), add(i - , i, );
spfa(n, m); floyd();
memset(head, , sizeof head); tot = ;
for (int i = ; i <= e; i++)
for (int k = ; k <= t; k++) {
add(k * n + edge[i][], k * n + edge[i][], edge[i][]);
add(k * n + edge[i][], k * n + edge[i][], edge[i][]);
}
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
if (i != j && f[i][j] <= l)
for (int k = ; k < t; k++)
add(k * n + i, (k + ) * n + j, );
spfa(, );
for (int k = ; k <= t; k++)
ans = min(ans, dis[k * n + n]);
printf("%d\n", ans); return ;
}
2019-08-12 纪中NOIP模拟B组的更多相关文章
- 2019-08-21 纪中NOIP模拟A组
T1 [JZOJ6315] 数字 题目描述
- 2019-08-20 纪中NOIP模拟B组
T1 [JZOJ3490] 旅游(travel) 题目描述 ztxz16如愿成为码农之后,整天的生活除了写程序还是写程序,十分苦逼.终于有一天,他意识到自己的生活太过平淡,于是决定外出旅游丰富阅历. ...
- 2019-08-09 纪中NOIP模拟B组
T1 [JZOJ1035] 粉刷匠 题目描述 windy有N条木板需要被粉刷. 每条木板被分为M个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一 ...
- 2019-08-15 纪中NOIP模拟B组
T1 [JZOJ3455] 库特的向量 题目描述 从前在一个美好的校园里,有一只(棵)可爱的弯枝理树.她内敛而羞涩,一副弱气的样子让人一看就想好好疼爱她.仅仅在她身边,就有许多女孩子想和她BH,比如铃 ...
- 2019-08-01 纪中NOIP模拟B组
T1 [JZOJ2642] 游戏 题目描述 Alice和Bob在玩一个游戏,游戏是在一个N*N的矩阵上进行的,每个格子上都有一个正整数.当轮到Alice/Bob时,他/她可以选择最后一列或最后一行,并 ...
- 2019-08-25 纪中NOIP模拟A组
T1 [JZOJ6314] Balancing Inversions 题目描述 Bessie 和 Elsie 在一个长为 2N 的布尔数组 A 上玩游戏. Bessie 的分数为 A 的前一半的逆序对 ...
- 2019-08-23 纪中NOIP模拟A组
T1 [JZOJ2908] 矩阵乘法 题目描述 给你一个 N*N 的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第 K 小数. 数据范围 对于 $20\%$ 的数据,$N \leq 100$,$Q ...
- 2019-08-20 纪中NOIP模拟A组
T1 [JZOJ6310] Global warming 题目描述 给定整数 n 和 x,以及一个大小为 n 的序列 a. 你可以选择一个区间 [l,r],然后令 a[i]+=d(l<=i< ...
- 2019-08-18 纪中NOIP模拟A组
T1 [JZOJ6309] 完全背包 题目描述
- 2019-08-17 纪中NOIP模拟B组
T1 [JZOJ3503] 粉刷 题目描述 鸡腿想到了一个很高(sha)明(bi)的问题,墙可以看作一个N*M的矩阵,有一些格子是有污点的.现在鸡腿可以竖着刷一次,覆盖连续的最多C列,或者横着刷一次, ...
随机推荐
- Excel_b_1
1.Excel简介 数据处理软件,lotus兼容(文件,选项,高级,拉到底,lotus,) 2.Excel功能 数据存储,数据处理,数据分析,数据呈现 3.具体功能 重新认识了Excel,选项,高级选 ...
- C# MVC 全局错误Application_Error中处理(包括Ajax请求)
在MVC的Global.asax Application_Error 中处理全局错误. 如果在未到创建请求对象时报错,此时 Context.Handler == null . 判断为Ajax请求时,我 ...
- [TJOI2007] 足彩投注
足彩投注 题目概述 题目背景 了解足球彩票的人可能知道,足球彩票中有一种游戏叫做"胜负彩",意为猜比赛的胜负.下面是一些与胜负彩有关的术语 注 :每一组有效组合数据. 投 注:彩民 ...
- 修改Linux中ssh协议中的默认端口号22
说明:最近的一台服务器老是提示异常登录.主要原因是你的账户和密码可能太简单了,别人用默认的端口22进行登录. 打开SSH端口所在文件 vim /etc/ssh/sshd_config 进入编辑模式,将 ...
- PHP MySQLi Prepared Statements Tutorial to Prevent SQL Injection
https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection#introduction On ...
- 解决问题:当redis服务端断开的时候`进程会崩溃(转载6哥笔记)
package main import ( "fmt" "github.com/astaxie/beego/logs" "github.com/gar ...
- C# WPF 表单更改提示
微信公众号:Dotnet9,网站:Dotnet9,问题或建议,请网站留言: 如果您觉得Dotnet9对您有帮助,欢迎赞赏 C# WPF 表单更改提示 内容目录 实现效果 业务场景 编码实现 本文参考 ...
- C# interact with Command prompt
using System.IO; using System.Diagnostics; static void Main(string[] args) { CmdDemo("dir" ...
- JAVA8对象属性的计算
Men men = new Men(); men.setName("UU"); men.setAge("56"); Men men1 = new Men(); ...
- .net mvc接收参数为null的解决方案
1.通过对象接收请求数据时的null 必须为对象的属性设置get与set private System.String _EMail = System.String.Empty; public Syst ...