见代码

点击查看代码
//背景:夸一下自己,CF1955A~E均是自己想出来的,这道题思路是自己想的,唯一没想到用差分数组维护
//原理:贪心(想最左边的1开始,不可能对其左边包括自己操作了,否则又要反转回去,无效操作,故可以一直往右移动判断) + 差分(也可以用线段树或树状数组)
//时间复杂度:纯差分数组o(n^2),树状数组o(n^2logn),可能会超时
//收获:差分数组的进一步理解,本题本质为区间修改,单点查询,但是这题有一个特殊性质,即区间单调移动,故用树状数组会有很多重复计算,不如一次差分前缀和
//感悟:CF的题质量的确高!
#include <bits/stdc++.h>
using namespace std;
void Solve()//解决问题函数
{
int n;
string s;
cin>>n>>s;//输入长度及对应长度的01串
int number[n+1];//整型数组,将01字符串转换,便于数学操作
int c[n+1];//差分数组
for (int i = 1;i<=n;i++) number[i] = s[i-1] - '0';//字符转数字
for (int i = n;i>=1;i--)//从大的开始枚举
{
memset(c,0,sizeof(c));//每次要重新初始化差分数组
for (int j = 1;j+i-1<=n;j++)//在01串上移动
{
c[j] = c[j-1] + c[j];//当前的位置的反转次数,求差分前缀和(我用了高级版,而用sum显式版反而不好操作)
int x = (number[j] + c[j])%2;//判断01
if(x) continue;//一不用处理
else//否则反转
{
c[j]++;//差分模板
c[j+i]--;
}
}
//操作完后,还剩余i-1(区间长度-1)个数未判断
bool flag = true;//标记是否全为1
for (int j = n+2-i;j<=n;j++)
{
c[j] = c[j-1] + c[j];//差分求和
int x = (number[j] + c[j])%2;//计算反转
if(x) continue;//如果是1,跳过
else//否则
{
flag = false;//标记非法
break;//退出循环
}
}
if(flag)//如果合法
{
cout<<i<<"\n";//输出
return;
}
}
return;
}
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t;
cin>>t;
while(t--)
{
Solve();
}
return 0;
}

CF1995E Long Inversions(贪心 + 差分)的更多相关文章

  1. bzoj 1704: [Usaco2007 Mar]Face The Right Way 自动转身机【贪心+差分】

    首先O(n^3)的贪心很好想,就是枚举k然后从前往后扫,扫到反就翻转区间 然后考虑优化掉翻转区间维,就是搞成差分的形式,在翻转区间的尾部打上标记,再用一个变量维护当前的翻转次数,加到当前状态上来判断是 ...

  2. CodeForces 1260D(二分+贪心+差分)

    题意 https://vjudge.net/problem/CodeForces-1260D 有m个士兵,t秒,你要带尽可能多的士兵从0去n+1,且他们不能被杀死.路上有一些陷阱,陷阱d[i]会杀死能 ...

  3. 洛谷P4064 [JXOI2017]加法(贪心 差分)

    题意 题目链接 Sol 这题就是一个很显然的贪心... 首先二分一个答案,然后check是否可行.check的时候我们需要对每个位置\(i\),维护出所有左端点在\(i\)左侧,右端点在\(i\)右侧 ...

  4. CF 276C Little Girl and Maximum Sum【贪心+差分】

    C. Little Girl and Maximum Sum time limit per test2 seconds memory limit per test256 megabytes input ...

  5. 洛谷 P2879 [USACO07JAN]区间统计Tallest Cow

    传送门 题目大意: n头牛,其中最高身高为h,给出r对关系(x,y) 表示x能看到y,当且仅当y>=x并且x和y中间的牛都比 他们矮的时候,求每头牛的最高身高. 题解:贪心+差分 将每头牛一开始 ...

  6. CF1491C Pekora and Trampoline 题解

    题目链接 ​ 比赛时只想到了 \(\mathcal O(n^3)\) 的暴力做法,官方题解是 \(\mathcal O(n^2)\) ,并且是可以优化为 \(\mathcal O(n)\) 的(贪心+ ...

  7. 洛谷P3406 海底高铁[差分 贪心]

    题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...

  8. 【tyvj】P2065 「Poetize10」封印一击(贪心+线段树/差分)

    http://new.tyvj.cn/p/2065 我就不说我很sb的用线段树来维护值...... 本机自测的时候想了老半天没想出怎么维护点在所有区间被多少区间包含的方法.最后一小时才想出来线段树(果 ...

  9. poj 1716 Integer Intervals (差分约束 或 贪心)

    Integer Intervals Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12192   Accepted: 514 ...

  10. P1986 元旦晚会——贪心或差分约束系统

    P1986 元旦晚会 每个人可能属于不同的声部,每个声部最少要有c[i]个人发声: 求最少需要多少话筒: 首先贪心,将所有声部的区间按照右端点大小排序,如果右端点相同,左端点从小到大排序: 贪心每次选 ...

随机推荐

  1. 重新定义 vscode 命令行工具 code命令 code $profile

    vscode 默认命令行有问题 他那个每次都打开cli.js 目录名里面有空格 要 &开头后面跟双引号 所以从新定义后 变量是 $变量名 前面再加上& 就能调用那个exe了 后面再跟上 ...

  2. SQL语句之基础增删改查

    目录 插入:NSERT INTO 语句 删除:DELETE 语句 更新:UPDATE 语句 选择 SELECT 语句 SELECT DISTINCT 语句 相关子句.运算符.关键字 WHERE 子句 ...

  3. 3、Azure Devops之Azure Repos篇

    1.什么是Azure Repos Azure Repos,就是我们常说的代码仓库,相当于gitee,github,git,svn工具.主要是提供给开发人员使用的,管理.查看代码的部件.通过Files. ...

  4. 【ATCOER、D - ±1 Operation 2】前缀和+排序二分

    import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; public cla ...

  5. leetcode 春季比赛3题 二叉搜索树染色

    其实和二叉搜索树一点关系都没有. 每个点的颜色只取决于最后一次包含该点的操作.用 set 维护所有颜色待确定的点,倒序处理询问,每次利用 lower_bound 方法从 set 中取出所有在询问范围内 ...

  6. drf(过滤、排序、异常)

    一. 过滤组件 1 内置过滤组件SearchFilter # 缺点: 外键字段的搜索操作将会抛出异常: Related Field got invalid lookup: icontains # 1) ...

  7. 没想到三天10KStar的营销利器MediaCrawler开源作者已经删库了

    前言 一站式社交平台数据抓取利器,带你玩转小红书.抖音.快手.B站和微博数据分析 不经意间,来查看MediaCrawler仓库源码,发现作者已经删库了.看来是领奖了.才几天不到的时间Star数量已经直 ...

  8. .Net MinimalApis响应返回值

    前言 文本主要讲 MinimalApis 中的使用自定义IResultModel和系统自带IResult做响应返回值. MinimalApis支持以下类型的返回值: string - 这包括 Task ...

  9. 基于R语言的GD库实现地理探测器并自动将连续变量转为类别变量

      本文介绍基于R语言中的GD包,依据栅格影像数据,实现自变量最优离散化方法选取与执行,并进行地理探测器(Geodetector)操作的方法.   首先,在R语言中进行地理探测器操作,可通过geode ...

  10. pymysql连接、关闭、查询,python如何操作mysql数据库

    1 def get_conn(): 2 """ 3 :return: 连接,游标 4 """ 5 # 创建连接 6 conn = pymys ...