首页 > TAG信息列表 > JSOI2007
[JSOI2007]文本生成器【AC自动机+DP】
下定决心想要将这份爱意传达给你,与你在一起的每一刻总是那么值得珍藏, 你的存在左右着我的思绪,实在是不想错过这样的美好, 真的不和我在一起吗? 我的学术生涯,虽然有点奇妙,嗯,果然是开始了。导师是个副教授,叫我写\(vue\),嗯,也没问题,除了我一点也不会写\(vue\)之外。我从知网上下载他NC20154 [JSOI2007]建筑抢修
题目链接 题目 题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全 毁坏。 现在的情况是:T部落基地里只有一个修理工人,「JSOI2007」合金
JSOI2007 合金 题意 \(~~~~\) 给出 \((n+m)\) 个三维点,满足坐标和为 \(1\) 。要求从前 \(n\) 个点中选最少的围成一个多边形,使得后 \(m\) 个多边形均在该多边形内部或边上。求最少选择的数量。 \(~~~~\) \(1\leq n,m\leq 500\). 废话 \(~~~~\) 考场上用 \(20\min\) 胡出来了跟讨Luogu - P4053 [JSOI2007]建筑抢修
#include<bits/stdc++.h>using namespace std;const int N = 2e5 + 10;int n;struct build{ int t1, t2;}a[N];int now, ans;priority_queue<int> Q;bool cmp(build a, build b){ return a.t2 < b.t2;}int main(){ cin >> n; for(int i = 1;P4053 [JSOI2007]建筑抢修
首先按照结束时间排序,显然结束早的要去做。能做就做,如果做不了,就在前面找一个耗时最大的,把最大的扔掉,换成当前的,如果最大的也比当前的小,那么显然当前的是做不了的,不用管了. struct inter { int r, len; bool operator <(const inter&rhs)const { return r < rhs.r; } } t[N];[JSOI2007]字符加密
IX.[JSOI2007]字符加密 这题的思路非常简单——断环复制成链,然后直接后缀排序一下即可。 为什么呢? 我们考虑两条后缀。假如它们在前\(n\)位中有所不同,显然它们之间的相对顺序不会有问题; 否则,假如它们前\(n\)位全都相同,则因为反正最后输出的就是最后一个字符,所以相对顺序没有影响,直洛谷P4052 [JSOI2007]文本生成器
题目描述 JSOI 交给队员 ZYX 一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是 GW 文本生成器 v6 版。 该软件可以随机生成一些文章——总是生成一篇长度固定且完全随机的文章。 也就是说,生成的文章中每个字符都是完全随机的。如果一「JSOI2007」文本生成器 题解
A 题面 JSOI 交给队员 ZYX 一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是 GW 文本生成器 v6 版。 该软件可以随机生成一些文章——总是生成一篇长度固定且完全随机的文章。 也就是说,生成的文章中每个字符都是完全随机的。如果一篇【JSOI2007】文本生成器
【JSOI2007】文本生成器 by AmanoKumiko Description JSOI 交给队员 ZYX 一个任务,编制一个称之为「文本生成器」的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是 GW 文本生成器 v6 版。该软件可以随机生成一些文章――总是生成一篇长度固定且完全随机的文章——也就是说,luogu P4052 [JSOI2007]文本生成器
题面传送门 考虑一下,会发现这个东西不太好算,考虑容斥一下,用总数减去一个都没有出现的个数。 那么就可以设\(dp_{i,j}\)表示匹配到\(i\),AC自动机上匹配到\(j\)的方案数。预处理一下就可以做了。 时间复杂度\(O(m\sum{|S|})\) 代码实现: #include<cstdio> #include<queue> #include<「JSOI2007」文本生成器
知识点:ACAM,DP 原题面:Luogu 简述 给定 \(n\) 个只由大写字母构成的模式串 \(s_1\sim s_n\),给定参数 \(m\)。 求有多少个长度为 \(m\) 的只由大写字母构成的字符串,满足其中至少有一个给定的模式串,答案对 \(10^4 + 7\) 取模。 \(1\le n\le 60\),\(1\le |s_i|,m\le 100\)。 1S,128MB。洛谷 P4053 [JSOI2007]建筑抢修
题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏。现在的情况是:T部落基地里只有一个修理工人,虽然他能瞬间到达P1841 [JSOI2007]重要的城市(最短路+拓扑)
找无向图中的某些点,使得删去这些点后会使得\(A\)到\(B\)的最短路变长,其中\(A\)和\(B\)都不等于给定的点 考虑对每个点跑一次dij,然后可以重建出一张最短路的新图,然后对新图做一次拓扑排序,如果发现某个点的出边终点的入度为1,那么就标记该点即可 注意一个特判: 标记点不能等于当前最短「JSOI2007」建筑抢修
传送门 Luogu 解题思路 显然先把所有楼按照报废时间递增排序。 然后考虑 \(1\cdots i-1\) 都能修完, \(i\) 修不完的情况。 显然我们在这 \(i\) 个里面至多只能修 \(i-1\) 个 那么我们把前 \(i\) 中最耗费时间的不修,只修剩下的 \(i-1\) 个,就可以省出后面的时间。 细节注意事项 咕JSOI2007 建筑抢修(贪心)
满分做法: 按照结束时间从小到大排序,一个一个进行处理。遇到当前时间+处理时间>结束时间的建筑时,把这个建筑和之前修理过的建筑中处理时间最大的进行比较。 如果当前处理时间小于最大值,那么可以进行替换,使当前时间变小,否则就放弃此建筑。剩下的就是直接加进来就可以了。 #include<cJSOI2007 建筑抢修
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <queue> #define maxn 250000 #define int long long #define rep(x,y,z) for(int x = y ; x <= z ;x ++) using namespace std ; int n ; str洛谷 P4053 [JSOI2007]建筑抢修
洛谷 P4053 [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏。现在的情况是:T部落基地LG2145 「JSOI2007」祖码 区间DP
问题描述 LG2145 题解 把颜色相同的一段看做一个点。 然后类似于合唱队区间DP即可。 但是这题好像出过一些情况,导致我包括题解区所有人需要特判最后一个点。 \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; template <typename Tp> void read(Tp &x){ x=[JSOI2007]合金
题意 洛谷P4049 思路 显然知道前两种元素浓度就可以知道第三种,即第三种没有用,我们将前两个浓度\((a,b)\)作为坐标系中的一点 考虑两种合金,它们分别可以拼出它们对应的向量上的所有点,假设两种向量分别为a和b,则它们共同可以拼出 a * x + b * y \((x+y=1)\) 可以看出这些点都在两点的P4051 [JSOI2007]字符加密
P4051 [JSOI2007]字符加密 喜欢钻研问题的JS 同学,最近又迷上了对加密方法的思考。一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法。 例如‘JSOI07’,可以读作: JSOI07 SOI07J OI07JS I07JSO 07JSOI 7JSOI0 把它们按照字符串的大小LG4051/BZOJ1031 「JSOI2007」字符加密
题目描述BZOJ1031LG4051 题解发现这是一个环,根据经验,破环为链,于是字符环变为了字符串之后对这个复制之后的字符串求后缀数组。**$\mathrm{len}$代表原字符串长度,$\mathrm{n}$代表复制后的字符串长度**最后输出的时候,判断一下,如果$SA_i \le len$,则输出$str_i$。 Code 1 #includP4053 [JSOI2007]建筑抢修
传送门 看题目就想到 $dp$,想不出来就去想贪心... 考虑按右端点排序,一个个修,如果在修某个建筑 $i$ 时发现来不及了,说明前 $i$ 个建筑最多只能修 $i-1$ 个 那么我们把前 $i$ 个中耗时最长的那个放弃,这样省下的时间最多 然后用优先队列维护一下就行 #include<iostream>#include<cstd题解【洛谷P1841】[JSOI2007]重要的城市
题面 题解 最短路图模板题。 介绍一下最短路图: 先对原图跑一边单源最短路,求出源点到每个点\(i\)的最短路\(dis[i]\). 接下来构建新图:对于一条边\((x,y,v)\),若\(dis[x]+v=dis[y]\)则在新图中加入这条边. 这样就构成了一个新图,满足\(DAG\)的性质 对于此题: 先建立最短路图, 考虑P4053 [JSOI2007]建筑抢修 堆贪心
思路:堆贪心 提交:1次 题解: 先按时间\(sort\),然后如果能修就直接扔堆里,不能修取堆顶比一下时间长短,把时间短的扔进堆; #include<cstdio> #include<iostream> #include<queue> #include<algorithm> #define ull unsigned long long #define ll long long #define R register int using【题解】Luogu P4052[JSOI2007]文本生成器
AC自动机上DP f[i][j]表示节点j,串长为i 当一个串的尾节点被标红或其fail指针指向的被标红,都是可读的 用总的减去不可读的即为答案 #include<iostream>#include<cstring>#include<cstdio>#include<queue>#define MOD (10007)#define N (10005)using namespace std;int Son[N][26