NOI.AC CSP-S 模拟 Round 3 简要题解

2024-01-30 01:32
文章标签 csp 模拟 round 题解 简要 noi ac

本文主要是介绍NOI.AC CSP-S 模拟 Round 3 简要题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

比赛链接
T1
一看就是整除分块的形式,如何整除分块
发现对于 j ≤ i j\le\sqrt i ji ⌊ i j ⌋ \left \lfloor \frac{i}{j }\right \rfloor ji 对应这唯一的值,暴力乘
对于 j ≥ s q r t i j\ge sqrt i jsqrti ⌊ i j ⌋ \left \lfloor \frac{i}{j }\right \rfloor ji 的值可能有一段区间 [ l , r ] [l,r] [l,r] 都是这个值
而 b 的下标可以去到的值就是 i − ⌊ i j ⌋ ∗ j ( j ∈ [ l , r ] ) i-\left \lfloor \frac{i}{j }\right \rfloor*j(j\in[l,r]) ijij(j[l,r])
就是区间 [ i − r ⌊ i j ⌋ , i − l ⌊ i j ⌋ ] [i-r\left \lfloor \frac{i}{j }\right \rfloor,i-l\left \lfloor \frac{i}{j }\right \rfloor] [irji,ilji]之间每割 ⌊ i j ⌋ \left \lfloor \frac{i}{j }\right \rfloor ji个位置的 b 的和,发现 ⌊ i j ⌋ ≤ n \left \lfloor \frac{i}{j }\right \rfloor\le \sqrt n jin
直接开 n \sqrt n n 个数组预处理前缀和即可


T2
D A G DAG DAG 上玩一玩支配树就好
口胡支配树:建出一棵树,祖先支配子孙,假设当前处理到的 x x x,入度为 0,也就是之前能到它的已经处理好(在支配树中),然后对于一个点,能支配它的就是它到根的链,于是能支配当前点 x x x的,就是可以到它的点在支配树上的 l c a lca lca


T3
首先有 n p 2 np^2 np2 d p dp dp f i , j , k f_{i,j,k} fi,j,k 表示到 i, ∑ a i x i = j \sum a_ix_i=j aixi=j ∑ b i x i = k \sum b_ix_i = k bixi=k ∑ c i x i \sum c_ix_i cixi 的最大值
转移枚举当前选不选就可以了
仔细观察数据范围,觉得应该是 O ( n p ) O(np) O(np) 的,然后发现 ∑ a i x i ≤ p \sum a_ix_i\le p aixip ∑ b i x i ≥ p \sum b_ix_i \ge p bixip
限制条件是相同的,于是令 f i , j f_{i,j} fi,j 表示 ∑ a i x i ≤ j \sum a_ix_i\le j aixij ∑ b i x i ≥ j \sum b_ix_i \ge j bixij ∑ c i x i \sum c_ix_i cixi 的最大值
如果当前不选, f i , j = f i − 1 , j f_{i,j}=f_{i-1,j} fi,j=fi1,j
如果当前选 f i , j = m a x ( f i − 1 , k ) + c i ( k ∈ [ i − b i , i − a i ] ) f_{i,j}=max(f_{i-1,k})+c_i(k\in [i-b_i,i-a_i]) fi,j=max(fi1,k)+ci(k[ibi,iai])
单调队列优化即可,数组可以滚动


总结:
不错的一套题
学到了分块的重要思想,直接求的有哪些,需要预处理的有哪些
然后手玩了一下支配树
学到了通过数据范围猜状态,通过限制条件的相似性减少状态

这篇关于NOI.AC CSP-S 模拟 Round 3 简要题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658724

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

hdu 3065 AC自动机 匹配串编号以及出现次数

题意: 仍旧是天朝语题。 Input 第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。 在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

zoj 3228 ac自动机

给出一个字符串和若干个单词,问这些单词在字符串里面出现了多少次。单词前面为0表示这个单词可重叠出现,1为不可重叠出现。 Sample Input ab 2 0 ab 1 ab abababac 2 0 aba 1 aba abcdefghijklmnopqrstuvwxyz 3 0 abc 1 def 1 jmn Sample Output Case 1 1 1 Case 2

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

Codeforces Beta Round #47 C凸包 (最终写法)

题意慢慢看。 typedef long long LL ;int cmp(double x){if(fabs(x) < 1e-8) return 0 ;return x > 0 ? 1 : -1 ;}struct point{double x , y ;point(){}point(double _x , double _y):x(_x) , y(_y){}point op

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti