Codeforces Round 768 (Div. 1) D. Flipping Range(思维题 等价类性质 dp)

CF768 Div1F. Flipping Range题解 Problem - D - Codeforces 因为每个操作取负的长度都是小于等于整个区间长度一半,根据字符串周期的dilemma,可以知道所有操作等价于每次能长度g的区间,其中g为所有bi的gcd。 发现这个操作下的一个性质,不管这个操作选在哪个开始位置,选到的区间中都恰好是1个下标mod g = 0, 1个下标mod g = 1,...,1个下标mod g = g - 1,然后考虑把取负的位置i记ci = 1否则ci = 0,能得到不管操作多少次,c[0] ^ c[g]^ c[2g] ^... . 阅读详情

题目

思路来源

官方题解

洛谷题解

题解

可操作的最短区间长度肯定是gcd,记为g,然后考虑如何dp

考虑g个等价类,每个等价类i,i+g,i+2*g,...

每次翻转长度为g的区间,会同时影响到g个等价类总的翻转的奇偶性,

性质一:只有每个等价类翻的次数奇偶性相同才合法 

性质二:此外,翻1-g和翻2-g+1可以起到翻(1,g+1)效果

等价类内翻两个相邻的,可以类似地叠加成两个不相邻的,推广为(i,i+x*g)

即等价类内如果有偶数个负数,可以两两翻完,奇数个负数,可以剩一个

此外,可以一开始翻一次[1,g],改变每个等价类内负数个数的奇偶性,所以两种情况都考虑

也就是考虑将所有数都翻成正数,

然后按是否操作一次[1,g],决定在等价类内负数个数为奇/偶时将绝对值最小的数回退掉,减掉2倍mn

这就是性质解法

而dp做法,则是注意到性质一后dp即可,dp[i][j]表示i的等价类的数总共被翻了奇/偶次

枚举当前数翻还是不翻,翻的话加1次翻,算-a[i],否则加0次翻,算a[i],

对每个等价类内dp值求和,取翻奇/偶次二者的max

代码1(性质)

// Problem: D. Flipping Range
// Contest: Codeforces - Codeforces Round 768 (Div. 1)
// URL: https://codeforces.com/contest/1630/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<ll,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define scll(a) scanf("%lld",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
const int N=1e6+10;
int t,n,m,g,v,a[N];
ll dp[N][2];
//考虑等价类 当前等价类内被翻了奇/偶次 只有每个等价类翻的次数奇偶性相同才合法 
//翻1-k和翻2-k+1可以起到翻(1,k+1)效果 类似地 可以翻(i,i+x*k)
void sol(){
	sci(n),sci(m);	
	ll all=0;
	rep(i,0,n-1){
		sci(a[i]);
		all+=abs(a[i]);
	}
	int g=0;
	rep(i,1,m){
		sci(v);
		g=__gcd(g,v);
	}
	ll sum1=0,sum2=0;
	rep(i,0,g-1){
		int mn=2e9,cnt=0;
		for(int j=i;j<n;j+=g){
			mn=min(mn,abs(a[j]));
			cnt+=(a[j]<0);
		}
		if(cnt&1)sum1+=mn;
		else sum2+=mn;
	}
	printf("%lld\n",all-2ll*min(sum1,sum2));
}
int main(){
	sci(t); // t=1
	while(t--){
		sol();
	}
	return 0;
}

代码2(dp)

// Problem: D. Flipping Range
// Contest: Codeforces - Codeforces Round 768 (Div. 1)
// URL: https://codeforces.com/contest/1630/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<ll,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define scll(a) scanf("%lld",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
const int N=1e6+10;
int t,n,m,g,v,a[N];
ll dp[N][2];
//考虑等价类 当前等价类内被翻了奇/偶次 只有每个等价类翻的次数奇偶性相同才合法 
//翻1-k和翻2-k+1可以起到翻(1,k+1)效果 类似地 可以翻(i,i+x*k)
void sol(){
	sci(n),sci(m);	
	rep(i,0,n-1){
		sci(a[i]);
	}
	int g=0;
	rep(i,1,m){
		sci(v);
		g=__gcd(g,v);
	}
	ll sum1=0,sum2=0;
	rep(i,0,g-1){
		dp[i][0]=0;dp[i][1]=-2e9;
		for(int j=i;j<n;j+=g){
			ll x1=dp[i][0],x2=dp[i][1];
			dp[i][0]=max(x1+a[j],x2-a[j]);
			dp[i][1]=max(x1-a[j],x2+a[j]);
		}
		sum1+=dp[i][0];
		sum2+=dp[i][1];
	}
	printf("%lld\n",max(sum1,sum2));
}
int main(){
	sci(t); // t=1
	while(t--){
		sol();
	}
	return 0;
}

声纹识别初学 最近开始关注声纹识别技术,发现国内做这个的确实没有几家,而且大多重点推声纹认证,用在公安司法金融领域,而我却关注文本无关的声纹识别,这里把我搜到的一点资料汇总在此. 发现njustzj001的专栏有两篇文章适合入门的我,贴下链接: 综述:  http://blog.csdn.net/xmu_jupiter/article/details/47209961 PLDA解释:  http:// 阅读详情

相关推荐

保姆级教程:手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动

本文提供了一份详细的保姆级教程,手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动。从基础配置到RGMII接口的特殊设置,再到驱动开发的关键步骤和调试技巧,帮助开发者快速掌握PHY芯片的移植与开发。

weixin_33734785的博客 333

CF1630D Flipping Range

如果 BBB 中有 x,yx,yx,y ,那么由于 BBB 中的数都不超过 n/2n/2n/2 ,所以对于长度为 x−yx-yx−y 的数列也是可以翻转的。 根据辗转相减,我们可以知道 gcd⁡(x,y)\gcd(x,y)gcd(x,y) 是可以任意翻转的。 因此,我们只需要考虑翻转 g=gcd⁡(b1,b2,⋯ ,bm)g=\gcd(b_1,b_2,\cdots,b_m)g=gcd(b1​,b2​,⋯,bm​) 的长度。 然后就是基操,把下标按照 ggg 的余数分组,并且对每个数设状态,有/无反转为 1/

Johnny817的博客 701

Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)

蜡烛图指标为识别K线形态的指标,笔者认为重点在于定义方式所提供的思路,背后的投资逻辑可以借鉴但不建议直接参考文档的翻译内容和源码逻辑存在不一致的现象,笔者分别列出中文百科中的定义和源码实际逻辑,供大家参考技术分析理论中的一些模糊词,ta-lib中给出了精确的定义源码

量化就是探索生活 3253

CodeForces - 1400D Zigzags(简单dp)

题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a ,现在要求找到满足条件的四元对 ( i , j , k , l ) 的个数: 1 <= i < j < k < l <= n a[ i ] == a[ k ] && a[ j ] == a[ l ] 题目分析:n 只有 3000 ,显然支持 n * n * logn 的时间复杂度,所以可以枚举四元对中其中的两个位置,然后去计算剩下的两个位置中有多少个符合条件的,基于此,我们可以设计两个简单的 d

Falcon的博客 704

从想法到零件:手把手拆解一个汽车功能如何从PRD写到SSTS和CTS

本文详细拆解了汽车电子需求从市场文档(MRD)到零部件技术规范(CTS)的完整流程,以雨天自动关窗功能为例,展示了PRD、SSTS和CTS的编写要点与交互设计。文章重点解析了系统分解的艺术和零部件落地的精确参数要求,为汽车电子工程师提供了从概念到实现的全流程实践指南。

weixin_30300225的博客 480

使用moveit!控制真实机械臂(5)——编写真实机械臂节点中的action服务程序

上一篇文章中,我们简要介绍了ROS中action的基本知识,为了控制真实机械臂,我们已经修改了moveit配置文件,使得moveti启动后具备一个control_msgs::FollowJointTrajectoryAction类型的action客户端,接下来,我们完成该类型action的另一半,编写C++程序来实现action的服务端。由于底层机器人控制程序一般差别都很大,这里展示的只是编程要点...

爱学习的草莓熊 1万+

Codeforces Round #768 (div1)(A~D)

这场因为明早有事就没更新,赛中过了A~C,D来不及写了,赛后5分钟码好提交2wa。。 A. And Matching(思维+分类讨论) 开局想到的就是优先将 i~n-i-1 匹配,答案为0,之后以一次交换得出贡献值,喜提一发wa,之后想了20多分钟才发现还有特判情况。。 首先对于k!=n-1时候,我们将之前的匹配进行一次换位,即n-1~k,0~n-k-1,其余不变即可 而对于k=n-1&&n>4的情况,我们发现将1与2两点交换可以得出3的贡献,因此变为n-3与0的交换 而k=

ATM1459007298的博客 1251

2025反爬终极方案:Python破解Cloudflare v2行为指纹,设备伪装+轨迹模拟拦截率压至1%

Cloudflare v2的反爬逻辑越来越接近“人类行为识别”,单纯的技术破解已失效,核心竞争力变成“模拟真实用户的能力”。本文的终极方案本质是“全方位复刻人类行为”——从设备指纹到操作轨迹,从网络特征到交互模式,让爬虫成为“无法被区分的真实用户”。这套方案的优势是“通用性强”,不仅适用于Cloudflare v2,也能破解大多数高反爬网站(如小红书、知乎、跨境电商)的行为检测;且代码可直接复用,新手只需替换目标URL和数据提取逻辑,就能快速落地。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2353

Codeforces D. 0-1-Tree (树形dp)

https://codeforces.com/contest/1156/problem/D 题意:给你一颗树,同时给每一条边定义一个属性0和1,定义(x,y)表示x到y,其中我们经过1边后不能经过0边,求有多少对(x,y); 做法:本蒟蒻只想得到树形dp的想法,想不到大佬的并查集方法。dp[u][4],分别定义了u和他子树的四种状态。如下图 dp[u][0]表示u的子树中全部是0连在一起的个...

KXL5180的博客 1303

3D Slicer肺部CT病灶体积测量:阈值法实操全流程

在医学影像分析中,病灶体积的精准测量是肿瘤评估、疗效随访和科研统计的重要基础。传统逐层手动勾画不仅耗时,且主观差异大,而基于CT值的阈值分割技术,通过设定灰度区间自动提取目标体素,能够快速生成三维分割结果,具有高效、可重复、边界标准统一的优势,尤其适用于肺部实性结节这类与周围肺实质对比度高的病灶。理解体素与CT值的关系,掌握阈值范围的设定逻辑,并配合连通域分析、边缘修正等工程化操作,即可在3D Slicer中稳定获得可靠的体积数据。本文从技术原理出发,系统梳理了DICOM导入、窗宽窗位调节、阈值选择、三维重

weixin_29050271的博客 251

SpringBoot + MyBatis-Plus 高效实现数据变更记录:从注解到通用审计方案(附源码)

*** 数据变更审计插件* 拦截增删改操作,自动记录变更日志*/@Component@Resource/*** 拦截SQL执行*/@Override/*** 数据变更审计插件* 拦截增删改操作,自动记录变更日志/*** 拦截SQL执行。

2601_94871597的博客 556

CF #768 F.Flipping Range

uniecho1的博客 401

2026年高教社杯数学建模国赛A题解题思路:从物理方程推导到MATLAB高效求解的全流程实战指南

□所有代码能够从头运行到尾,不报错(清除workspace重新跑一遍)□论文中的每个图号、表号、公式编号与正文引用一致□附录中附上核心代码(注意:不是全部代码,而是关键求解器和后处理部分)□支撑材料压缩包包含完整代码、数据文件、README说明□摘要字数严格控制在1000字以内,突出创新点和核心结果□。

YOLO 109

2018 Benelux Algorithm Programming Contest (BAPC 18) G-Game Night(滚动)

题意 给一个只含ABC的字符串, 要求把字符串的A放在一起B放在一起C放在一起, 问最少有多少个字母需要被移动位置。 思路来源 翼神 题解 就是一波暴力啊,和秦皇岛那个字符串暴力题很像。 全排列ABC、ACB、BCA、BAC、CAB、CBA六种, 考虑是圆串,所以可简化为ABC、ACB两种, 预处理两个串,然后与原串暴力匹配即可, 原串也是圆串,所以将其重复一遍展成线...

小衣同学的博客 1316

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Codeforces Round 948 (Div. 2) E. Tensor(思维题-交互)

(6)否则,记las的两个父亲为f1、f2(也就是上图的点6、点7),如果能往f1后面续,就往f1后面续,否则往f2后面续。新来的点3,可以接在点4后,也可以接在点5后,也可以接在点6后,也可以接在点7后,因为在链中间的点后面续新的点,都可以看成是在交点后面续新的点,不影响两条链的性质。而此时应该是10->9->6->3->2,另一条链8->7->5->4->1。而这种情况的出现,说明前面有一个只询问了1次的点,也就是在点5下面的点4,可以发现,在点5形成Y字型,后接点4之后,新来的点3并没有续到点4上,

小衣同学的博客 1224

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

AtCoder Beginner Contest 278 G.Generalized Subtraction Game(思维题/博弈 multi-sg)

AtCoder Beginner Contest 278 G.Generalized Subtraction Game(思维题/博弈 multi-sg)

小衣同学的博客 1171

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Codeforces Round 975 (Div. 1) D. Max Plus Min Plus Size(思维题 并查集/动态dp 线段树维护状态合并)

f[x][i][j][k]表示线段树的x节点,最大值有没有取到,左端点有没有选,右端点有没有选,如果最大值被包含在1 3 5里显然取1 3 5,否则换成2 4一定能取到最大值,是不劣的,对于最小值固定的话,对于1 2 3 4 5的连续段,要么贪心地取1 3 5,要么取2 4。如果存在一个连续段,使得选这个连续段中较多的那一半(奇数唯一,偶数均可)能取到最大值。则答案不需要减1,否则为了取到最大值需要反选,将答案减1。hhoppitree代码 + 官方题解。注意到最大值一定会被取到,

小衣同学的博客 1126

The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)

维护两个vector L、R,代表下一步要在[l,mid]和[mid+1,r]分治的vector。这样del里的元素,在并查集上找到其祖先时,可以用to数组确定其应该被放进L还是R。每次将x random_shuffle后,取出vector尾部的两个u、v,和已经被询问出来的元素再一起询问一次,就能确定出这个元素该放进L还是R。分治,假设当前解决到[l,r],要递归的vector是x,期望次数是6000的,实际跑得飞快,也没被卡掉。只剩一个元素时,L或R一定已经有元素,首先特判n=1的情况,其实也不用问。

小衣同学的博客 1064

Codeforces Round 973 (Div. 2) F1. Game in Tree (Easy Version)(思维题 博弈)

如果能走旁边的链(也就是当前点,刨去标记链以外的子树中最长的链),使得对面走剩余的连通块无法比你大,就走旁边的链,并宣告获胜。维护实际是一个区间最值,可以用set或者st表。两个人的策略是一样的,把1到u的路径标记,否则沿着标记链,朝对面的方向走一步。

小衣同学的博客 1040

Codeforces Round 803 (Div. 2) E. PermutationForces II(思维题 位置序列)

类似地,posb[6]和posb[7]都可以用到[1,7]里的可用位置,分别对应ans*=2和ans*=1。posb[3]可以用到[1,7]里的可用位置,即[1 4 2 6 7 3 5]里的[4 7 3 5],posb[1]只能用到[1,5]里的可用位置,即[1 4 2 6 7]里的[4 7],ans*=2。所以,合法的条件是,对于b[i]不为-1的位置,要求a[i]的值不能超过b[i]+s。比如,在为posb[1]=-1这个未确定的位置赋值的时候,posb[1]的值,

小衣同学的博客 1034

Gym - 101291L Three Square(模拟)

题意 给你三个矩形,问是否能拼成一个正方形 题解 首先,面积和得是一个完全平方数q(不是就说明不能),记q=r*r 把边长为r的那个矩形挑出来(不存在就说明不能),然后把剩下两个暴力合并 合并之后,再把合并出来的和挑出来的暴力合并, 如果能合并成一个正方形就能,否则就不能…… 心得 这种没什么算法没什么套路的题最讨厌了…… 之前一直wa在12,CF的gym也看不了样例,很迷…...

小衣同学的博客 998

蓝桥杯周赛 第 1 场 强者挑战赛 6. 小球碰撞【算法赛】(思维题/最长上升子序列LIS)

二分时间t,第i个小球对应一个起点pi、终点pi+t*vi的区间,问题转化为,选最多的区间,使得不存在区间包含(即li<lj<rj<ri)的情况,排完序后,考虑右端点的LIS,如果>=n-k,即合法,否则不合法。如果可以选这样的区间>=n-k个,则t是合法的时间。由于左端点均不同,所以先按左端点排序,

小衣同学的博客 995

华中农业大学2023年十二届程序设计竞赛(同步赛)G. 简单的开关(思维 括号匹配+差分+前缀和 set/珂朵莉树)

表示将第l个(含l)到第r个(含r)开关的状态设置为开或者关(k=0表示关、k=1表示开)设出现次数为x,则C(x,2)就能找到两个合法端点L-1和R,确定题目所求区间[L,R]2. assign将[l,r]内的每个区间删掉,合并为同一个[l,r],赋值为k。1. split将包含x的区间[l,r)拆成两个区间[l,x)和[x,r)每一段区间[l,r),记录区间开始的前缀和值和区间终止时的前缀和值,可以把1看成(,遇到(就+1,把0看成是),遇到)就-1,后面的逻辑相同,前面的区间覆盖用珂朵莉树维护。

小衣同学的博客 982

Codeforces Round 901 (Div. 1) B. Jellyfish and Math(思维题/bfs)

所以,如果相同的(x>>i&1,y>>i&1,w>>&1)对应的(c>>i&1,d>>i&1)不同时,直接无解。t(t

小衣同学的博客 964

Toyota Programming Contest 2024#1(AtCoder Beginner Contest 337)F. Usual Color Ball Problems(思维题 双指针)

长为n(n<=2e5)的球序列,第i个球颜色ci,有m(m<=n)个空盒子,编号1-m。首先执行r次,意味着,循环询问,对于每个开头的长为n的序列都询问一次,所以序列扩成二倍。记颜色w的球在盒子里的球为now[w]个,则占了now[w]/k(向上取整)个盒子。位置在p位置之后,但因为和p位置之前放入盒子里的球同色,而能被继续放入的球,一旦确定了不在盒子内的球的位置p,前面在盒子里的同色的球的个数也能确定,然后考虑双指针,双指针维护第一个不在盒子内的球的位置,注意到它是单增的。

小衣同学的博客 826

Codeforces Round #833 (Div. 2) D. ConstructOR(构造 逆元/exgcd)

Codeforces Round #833 (Div. 2) D. ConstructOR(构造 逆元/exgcd)

小衣同学的博客 825
上一篇: Codeforces Round 779 (Div. 2) D2. 388535(思维题 二进制性质/trie树上最大最小异或)
下一篇: CCPC 2023 北京市赛 G.【模板】线段树(线段树区间合并20次多项式)
小衣同学
博客等级 码龄9年 1444粉丝 995原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小衣同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值