首页 > TAG信息列表 > NOI2016

[NOI2016] 优秀的拆分 题解

[NOI2016] 优秀的拆分 题解 link 题意 \(T\) 组询问,每组一个字符串 \(s\) 求 \(s\) 所有字串分成 \(AABB\) 的方案数之和。 \(A,B\) 为非空串。 题解 设 \(f_i\) 为一 \(i\) 结尾的 \(AA\) 串数量,\(g_i\) 为一 \(i\) 结尾的 \(AA\) 穿数量。 \(ans=\sum f_{i}\times g_{i+1}\) 考

「NOI2016」网格 题解

「NOI2016」网格 题解 前言 感谢 zqm 学长提供调代码服务! 本文中,所有没有特殊说明的连通都是指四连通,相邻都是指上下左右相邻。 题目大意 有一个 $ n \times m $ 的网格,上面有 $ c $ 个障碍物,求至少还需要多少个障碍物才能使空地不连通。 输入 第一行有一个整数 $ T $,表示数据组数

luogu P1721 [NOI2016] 国王饮水记

题面传送门 首先我们发现,一定不会有低于\(h_1\)的参与操作的过程。 然后考虑一个\(x\)与比它大的\(y<z\),则发现一定是先\((x,y)\),再\((\frac{x+y}{2},z)\)更好。 因为这样是\(\frac{4}{x+y}+\frac{z}{2}\),而一起做是\(\frac{x+y+z}{3}\),显然更优。 而每个节点一定只会和一号节点联

[NOI2016] 旷野大计算(挖坑不填)

前言 阴间人做阴间题 手搓计算机 感觉很有意思,来看一看。 无论如何,这是一道数学题,因此我可能一时半会做不出来了,慢慢填坑吧。 题意 有一个存储空间,每一位都储存一个实数。 现将第 \(i\) 位的数记为 \(x_i\),每位有一个计算结点,这个计算结点的结果会输出到该位置。 名称 操作符(类

『题解』Luogu-P1587 [NOI2016] 循环之美

P1587 [NOI2016] 循环之美 Description 给定十进制数 \(n, m, k\),求在 \(k\) 进制下有多少个 值不相等 的 纯循环 小数可以用分数 \(\dfrac{x}{y}\) 表示,其中 \(1\le x\le n, 1\le y\le m, x, y \in \mathbb{N}^*\)。 \(1\le n, m\le 10^9, 2\le k\le 2\times 10^3\)。 Solution

luogu P1587 [NOI2016] 循环之美

https://www.luogu.com.cn/problem/P1587 首先思考我们要求的是什么? { x

洛谷 P1712 [NOI2016] 区间(尺取法、线段树)

传送门 解题思路 考虑尺取法。 将所有区间按照长度从小到大排序,然后tow-pointers在保证区间最大值>=m的情况下不断维护区间+1/-1。 用线段树维护。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #includ

P1721 [NOI2016] 国王饮水记 题解

蒟蒻的第一篇黑题题解,求过。 题目链接 题意描述 这道题用简洁的话来说,就是: 给你 \(n\) 个数字,你可以让取其中任意若干个数字,每次操作,都会使所有取的数字变为取的数字的平均数,并且你最多只能进行 \(k\) 次操作,你要在这经过最多 \(k\) 次操作后使得给你的第一个数字变得最大。输出保

P1117 [NOI2016] 优秀的拆分

【题意】 能被表示为AABB的形式被称为一种优秀的拆分,求一个字符串有多少个不同的优秀的拆分 注意本质相同的子串在不同位置要重复计算 【分析】 首先我们不难想到计算f[i]表示i为结尾的AA形式的个数,g[i]表示i开头的AA形式的个数 答案就为f[i]*g[i+1] i=1-(n-1) 问题就变成了如何

「NOI2016」优秀的拆分题解

这题的套路比较经典,可以记一记。 首先需要将题目进行转化,令\(a_i\) 表示已\(i\) 位置结尾的所有\(AA\) 个数,\(b_i\) 表示所有以\(i\) 位置开头的\(AA\) 个数,那么答案为 \[ans=\sum_ia_ib_{i+1} \]考虑求出\(a_i,b_i\) 。暴力是直接枚举然后用哈希判断,可以做到\(\mathcal O(n^2)\)

[NOI2016] 循环之美

VII.[NOI2016] 循环之美 依据小学数论知识,我们要求 \[\sum\limits_{i=1}^n\sum\limits_{j=1}^m[\gcd(i,j)=1][\gcd(j,k)=1] \]因为后面的 \(k\) 是个常数,所以我们就想把它搞出来。 \[\begin{aligned}&\sum\limits_{i=1}^n\sum\limits_{j=1}^m\Big[\gcd(i,j)=1\Big]\Big[\gcd(j,k)=

[NOI2016] 循环之美

description 求 \[\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=1][\frac ij在k进制下是纯循环小数] \]data range \(n,m\le 10^9,k\le 2000\) solution \(\frac ij\)在\(k\)进制下为纯循环小数当且仅当\(\gcd(j,k)=1\) 证明戳这里 那么原式 \[=\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=1][\gc

luogu P1712 [NOI2016]区间 贪心 尺取法 线段树 二分

LINK:区间 没想到尺取法. 先说暴力 可以发现答案一定可以转换到端点处 所以在每个端点从小到大扫描线段就能得到答案 复杂度\(n\cdot m\) 再说我的做法 想到了二分 可以进行二分答案 从左到右加入线段 加到线段的每个端点的时候 将所有加入的线段 插到主席树里面 考虑判定当前ans合

题解-NOI2016 优秀的拆分

NOI2016 优秀的拆分 \(T\) 组测试数据。求字符串 \(s\) 的所有子串拆成 \(AABB\) 形式的方案总和。 数据范围:\(1\le T\le 10\),\(1\le n\le 3\cdot 10^4\)。 这道题太神了,能一次做出这题的人往往是人形自走题库。真的全是套路! 令 \(n=|s|\),\(f_i\) 表示有几个以 \(s_i\) 结

「NOI2016」国王饮水记(猜结论+动态规划+斜率优化)

https://loj.ac/problem/2087 干脆把这年NOI改成猜结论大赛好了。 先把\(h\)从小到大排序。 上来先猜三个显然的结论: 1.一个\(h[i]\)不会被用多次 2.我们用到的一定是\(h\)的一个后缀 3.\(h\)的后缀用法,把\(h\)的后缀划分成若干段,从左往右每次合并一段 设\(f[i][j]\)表示合并了\(i

[NOI2016]优秀的拆分 [后缀数组]

// powered by c++11 // by Isaunoya #include <bits/stdc++.h> #define rep(i, x, y) for (register int i = (x); i <= (y); ++i) #define Rep(i, x, y) for (register int i = (x); i >= (y); --i) using namespace std; using db = double; using ll = long l

BZOJ 4652. [Noi2016] 循环之美

  首先,一个分数 $\frac{p}{q}$ 在 $k$ 进制下是纯循环小数,就是 $\exists t$,$p \equiv p \times k^t \pmod q$,其中 $p \bot q$,那么即为 $k^t \equiv 1 \pmod q$,要存在解,就得 $k \bot q$。所以答案就是 $\sum_{i=1}^n\sum_{j=1}^m [i\bot j][k\bot q]$$$\sum_{i=1}^n\sum_{j=1}^m [

[NOI2016]优秀的拆分

优秀的拆分 题解 看到题目,数据范围有点怪异。 对于95%的数据, 对于100%的数据,。 意思是只有5分是正解。 好吧,95pts的还是很好想的,我们可以维护出a,b两个数组,代表以i为结尾的AA型字符串,代表从i开始的BB型字符串。 很明显,答案就是,a数组与b数组都可以用hash暴力求出来,之后就可以跑

Noi2016十连测第二场-黑暗 (二项式定理/斯特林数+CDQ+NTT)

Noi2016十连测第二场-黑暗 (二项式定理/斯特林数+CDQ+NTT) 题意: n 个点的无向图,每条边都可能存在,一个图的权值是连通块个数的 m 次方,求所有可能的图的权值和。 考虑\(dp[i][j]\)表示\(j\)个点,权值为\(i\)次方 我们首先要预处理出\(n\)个点无向联通图的数量\(g[i]\),模板题:BZOJ-3456

洛谷P1587 [NOI2016]循环之美

神仙题目 给定\(n,m\),求有多少数值上互补相等的可以表示成\(\frac{x}{y}\)的数,满足\(1≤x≤n,1≤y≤m\),且\(\frac{x}{y}\)在\(k\)进制下是纯循环小数(特别地,整数也是纯循环小数) \(1≤n,m≤10^9,2≤k≤2000\) 首先要求数值上互补相等,即要求\(x⊥y\) 又要满足纯循环小数,假设循环节长

[洛谷P1712] NOI2016 区间

问题描述 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn]。现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置。换句话说,就是使得存在一个 x,使得对于每一个被选中的区间 [li,ri],都有 li≤x≤ri。 对于一个合法的选取方案,它的花费为被选中的最长区间长度减去被选中的

51Nod1686 第K大区间 和 NOI2016 区间

谈一下尺取法的经典题。 第K大区间 定义一个区间的值为其众数出现的次数。 现给出n个数,求将所有区间的值排序后,第K大的值为多少。 众数:区间里出现次数最多的数字,例如:1 1 2 2 2,区间[1 1]的众数为1,区间[3 5]的众数为2 题解 二分这个值,转化成判断问题。 将求第k大变成求第n*(n-1)/2-k

luogu_P1712 [NOI2016]区间

传送门:https://www.luogu.org/problem/P1712 学到了一种据说是普及组的思想--取尺法。(具体是啥忘了。。。。。。好像是一种很优秀的枚举方法。 这道题就是先把区间按照区间长度排个序  (好像有了单调性好多问题就很简单了 然后把区间计算到答案里 (何为计算到贡献里? 就是这个区间里

洛谷$P1712\ [NOI2016]$区间 线段树

正解:线段树 解题报告: 传送门$QwQ$ $umm$很久以前做的了来补个题解$QwQ$ 考虑给每个区间按权值($r-l$从大往小排序,依次加入,然后考虑如果有一个位置被覆盖次数等于$m$了就可以把权值最大的那个删去直到被覆盖次数小于$m$,顺便更新答案 然后就做完辣!$QwQ$ 放下代码趴,然后因为是

BZOJ 4653: [Noi2016]区间 双指针 + 线段树

Code:  #include <cstdio>#include <string>#include <algorithm> using namespace std; namespace IO { inline void setIO(string s) { string in=s+".in"; string out=s+".out"; freopen(in.c_str(),&qu