首页 > 其他分享 >CodeCraft-22 and Codeforces Round 795 (Div. 2)C. Sum of Substrings(分类讨论、贪心)

CodeCraft-22 and Codeforces Round 795 (Div. 2)C. Sum of Substrings(分类讨论、贪心)

时间:2024-02-04 12:34:05浏览次数:26  
标签:CodeCraft cout 22 Sum 位置 long 答案 dr define

感觉分类讨论的能有点弱。遇到复杂一点的分类讨论的题目,代码就写的巨长。
首先观察到处在中间位置的1对答案的贡献是11,具体在中间哪个位置是没有关系的。
只有两端的两个位置是比较特殊的
\(1位置处的1对答案的贡献是10\)
\(2位置处的1对答案的贡献是1\)
所有我们考虑将最左端第一次出现的1放到1位置
将最右端第一次出现的1放到n的位置。
贪心的考虑,如果能进行第二个操作我们优先进行第2个操作,因为我们希望答案最小,不能进行第2个操作的情况下我们进行第1种操作。
\(操作完后如果1位置能有1我们就将答案-1\)
\(如果n位置能有1我们就将答案-10\)
代码很丑\(qwq\)

#include <bits/stdc++.h> 
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define ls p<<1
#define rs p<<1|1
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define debug(a) cout<<#a<<"="<<a<<endl;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define INF 0x3f3f3f3f 
#define x first
#define y second
#define pb push_back

using namespace std;
const int N=2e5+10;
char a[N];
void solve()
{
	int n,k;cin>>n>>k;
	cin>>(a+1);
	int l1=1,r1=n,cnt=0;
	rep(i,1,n)	if(a[i]=='1')	cnt++;
	//找左边第1个1的位置
	rep(i,1,n) if(a[i]=='1')	
	{
		l1=i;
		break;	
	}		
	
	//找右边第一个1的位置
	fep(i,n,1)	if(a[i]=='1')	
	{
		r1=i;
		break;
	}

	if(cnt==0)
	{
		cout<<0<<endl;
		return;
	}
	//只有1个1
	else if(cnt==1)
	{
		int dl=l1-1,dr=n-r1;
		//先判是否能道右边
		if(k>=dr)
		{
			cout<<1<<endl;
			return;
		}
		//左边
		if(k>=dl)
		{
			cout<<10<<endl;
			return;
		}
		else	out<<11<<endl;
	}
	else
	{
		int dl=l1-1,dr=n-r1;
		int ans=11*cnt;	
		//先判是否能到右边
		if(k>=dr)	ans-=10,k-=dr;
		//左边
		if(k>=dl)	ans-=1;
		cout<<ans<<endl;
	}
	
}
signed main()
{
	IOS	
//  	freopen("1.in", "r", stdin);
  	int _;
	cin>>_;
	while(_--)
	solve();
	return 0;
}

标签:CodeCraft,cout,22,Sum,位置,long,答案,dr,define
From: https://www.cnblogs.com/cxy8/p/18005962

相关文章

  • ABC339_g Smaller Sum 题解
    题目链接:Atcoder或者洛谷比价朴素的题,首先有暴力的想法就是树套树或者分块。这两种就不再赘述,这里来正式提提主xi树(应该不能打出来这玩意)的本质而不再停留在板题找第\(k\)大上。对于可差性问题和传统问题不同,我们对于可差性问题往往都有更好的优化方案。例如对于树类问......
  • 2022省赛B组真题
    2022省赛B组真题(时间复杂度:如果1s就要控制在1亿以内)填空题1.顺子日期小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456等。顺子日期指的就是在日期的yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如20220123就是一个顺子日期,因为它出现了一个顺子:123......
  • 大胆假设小心验证——cf_922_C. XOR-distance
    目录问题概述思路想法参考代码问题反思问题概述给出整数a、b、r,要求输出|(a^x)-(b^x)|的绝对值,其中0<=x<=r(取值都是[0,1e18])思路想法首先是一个位置关系,由于求的是绝对值,所以我们可以假定a>b;第二,我们要做的是异或操作,因此可以将a和b的二进制数写出来,结合异或的特点,可以发......
  • 2024/01/22
    设计注册页面,并对输入的值进行一个简单的初步判断。<%--CreatedbyIntelliJIDEA.User:龚涵彬Date:2024/2/2Time:19:52TochangethistemplateuseFile|Settings|FileTemplates.--%><%@pagecontentType="text/html;charset=UTF-8"language="ja......
  • CF522D Closest Equals 离线扫描 + 线段树
    CF522DClosestEquals题意:m个询问,求[l,r]内相同元素的最小距离。离线询问,按右端点排序。对于每一个a[i],如果last[a[i]]存在,将线段树last[a[i]]的位置改为i-last[a[i]]。查询区间最小值。当然这题也可以回滚莫队。注:本题一路从黑题堕落到绿题#include<bits/stdc......
  • Windows Server 2022 OVF, updated Jan 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2022OVF,updatedJan2024(sysin)-VMware虚拟机模板2024年1月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2022-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现在......
  • P8338 [AHOI2022] 排列
    建边:\(i\top_i\),这样会形成若干个置换环,每次操作相当于每个点同时走一步。记置换环的数量为\(m\),从\(1\)到\(m\)编号,第\(i\)个置换环的大小是\(s_i\),\(bel_i\)为点\(i\)所属的置换环编号。显然\(f(i,j)=0\)的充要条件是\(i,j\)在同一置换环上,否则\(f(i,j......
  • 【洛谷 P2249】【深基13.例1】查找(向量+二分查找+递归)
    【深基13.例1】查找题目描述输入个不超过的单调不减的(就是后面的数字不小于前面的数字)非负整数,然后进行次询问。对于每次询问,给出一个整数,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出。输入格式第一行个整数和,表示数字个数和询问次数。第二行......
  • 2022CCPC女生赛-L.彩色的树(线段树合并)
     链接Problem-L-Codeforces以前迷迷糊糊用dsuontree写的题目但是其实没搞明白现在换一种写(太菜了还是没搞明白dsuontree)题意:给你一棵树,询问给定询问的节点上,子树内距离小于等于k的节点不同颜色的种类有多少个。k是固定的值。解法:本题做法为比较板子的线段树合并,......
  • 【洛谷 P2249】【深基13.例1】查找(向量+lower_bound)
    【深基13.例1】查找题目描述输入个不超过的单调不减的(就是后面的数字不小于前面的数字)非负整数,然后进行次询问。对于每次询问,给出一个整数,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出。输入格式第一行个整数和,表示数字个数和询问次数。第二行......