首页 > 其他分享 >cf1809D-1900-66min

cf1809D-1900-66min

时间:2024-07-19 19:09:08浏览次数:7  
标签:66min int cf1809D else -- count1 c1 include 1900

重点在于看出来操作1至多执行一次,之后就很容易了 ,加上一些预处理的小优化就能过,就是代码逻辑比较复杂,对coding能力有一些要求

 

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <list>
#define int long long
using namespace std;
string s;
int ans;
int count1[1000005],count0[1000005];

void solution()
{
	cin>>s;
	//cout<<s;
	ans=10e17;
	for(int i=0;i<=s.size()-1;i++)
	{
		if(s[i]=='1')
		{
			if(i>0)count1[i]=count1[i-1]+1;
			else count1[i]=1;
		}
		else
		{
			if(i>0)count1[i]=count1[i-1];
			else count1[i]=0;
		}
	}
	for(int i=s.size()-1;i>=0;i--)
	{
		if(s[i]=='0')
		{
			if(i<s.size()-1)count0[i]=count0[i+1]+1;
			else count0[i]=1;
		}
		else
		{
			if(i<s.size()-1)count0[i]=count0[i+1];
			else count0[i]=0;
		}
	}
	for(int i=0;i<=(int)(s.size())-2;i++)
	{
		int count=0;
		if(s[i]=='1'&&s[i+1]=='0')
		{
			// for(int j=i-1;j>=0;j--)
			// {
			// 	if(s[j]=='1')count++;
			// }
			// for(int j=i+2;j<s.size();j++)
			// {
			// 	if(s[j]=='0')count++;
			// }
			int c1,c2;
			if(i-1>=0)c1=count1[i-1];
			else c1=0;
			if(i+2<=s.size()-1)c2=count0[i+2];
			else c2=0;
			count=c1+c2;
			ans=min(ans,(int)((count+1)*10e11+count));
		}
		else
		{
			// for(int j=i-1;j>=0;j--)
			// {
			// 	if(s[j]=='1')count++;
			// }
			// for(int j=i+2;j<s.size();j++)
			// {
			// 	if(s[j]=='0')count++;
			// }
			int c1,c2;
			if(i-1>=0)c1=count1[i-1];
			else c1=0;
			if(i+2<=s.size()-1)c2=count0[i+2];
			else c2=0;
			count=c1+c2;
			//cout<<count1[i-1]<<' '<<count0[i+2]<<' '<<ans<<endl<<endl<<endl;
			ans=min(ans,(int)(count*10e11+count));
		}
		//cout<<i<<' '<<ans<<endl;
		//cout<<i<<' '<<s.size()-2<<endl;
	}
	int flag=1;
	for(int i=1;i<=s.size()-1;i++)
	{
		if(s[i]!=s[i-1])
		{
			flag=0;
			break;
		}
	}
	if(flag==1)ans=0;
	cout<<ans<<endl;//<<endl<<endl;

}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int T;
	cin>>T;
	while(T--)
		solution();
	return 0;
}

 

标签:66min,int,cf1809D,else,--,count1,c1,include,1900
From: https://www.cnblogs.com/gongkai/p/18312151

相关文章

  • CF 1980 F1 Field Division (easy version) (*1900)
    CF1980F1FieldDivision(easyversion)(*1900)题目链接题意:有一个大小为\(n\timesm\)($2\len,m\le10^9$)的矩形。其中有\(k\)个喷泉,你现在可以从左侧或者上侧任意一个不是喷泉的单元格出发,每次只能移向相邻的下或者右的单元格。直到走到矩阵的右侧或者底侧结束。......
  • 1900springboot VUE 生态菜园管理系统开发mysql数据库web结构java编程计算机网页源码m
    一、源码特点 springbootVUE生态菜园管理系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。前段主要技术vue 后端主......
  • EDGE浏览器新用户配置登录Microsoft账户出现0x80190001错误代码
    在网页内可以轻松反复登陆Microsoft账户,但是在EDGE浏览器上无法登陆。浏览器原本有一个用户配置,已经登陆了一个账号,在创建新的用户配置时,始终无法登陆账户。这个情况持续了两个星期  若是有使用代理,加速器,hosts修改器等,建议卸载一下。然后参考以下链接恢复hosts文件:https:/......
  • excel 无法正确处理 1900-03-01 前的日期
    ​excel无法正确处理1900-03-01前的日期 问题由来:excel用公式=TEXT(A1,"yyyy-mm-dd")转日期时,当A1的值等于59的时候,返回值是1900-02-28;当A1的值等于61的时候,返回值是1900-03-01;那么当A1的值为60的时候,返回值是多少?根据给出的信息,当A1的值为59时,返回值是1900-02-28,而......
  • CF 1900 选做
    byDuck.CF1012BChemicaltable双倍经验eJOI2018同名题目。经典套路题。我们把行号和列号建成二分图,那么这个连边条件可以看作,\((r_1,c_1),(r_1,c_2),(r_2,c_2)\)之间有边后就会自然导致\(r_2,c_2\)连通。最后的目标是让所有点联通。并查集维护连通性,答案就是连通块数......
  • 斑马数据集目标检测1900张VOC+YOLO格式标注
    斑马是一种独特的马科动物,主要分布于非洲的草原、稀树草原和沙漠地区。它们因身上黑白相间的条纹而闻名,每只斑马的条纹都是独一无二的,这种特征不仅使它们在草原上显得优雅而充满活力,还具有保护作用,使它们在广阔的草原上更容易融入环境,避免天敌的注意。斑马的价值体现在多个方......
  • codeforce 1700-1900
    3.6LonelyMountainDungeons 算贡献算了半天还错了,这种采用容斥可以减少细节处理,代码注释有#include<bits/stdc++.h>usingnamespacestd;#defineendl"\n"#defineintlonglongtypedeflonglongll;voidsolve(){intn,b,x;cin>>n>>b>&......
  • Codeforces 1900E Transitive Graph
    考虑题目的限制条件:存在$a\tob,b\toc$的边,就会有$a\toc$的边。考虑$p_{1\simk}$,满足这$k$个点按顺序组成了一个环且无重点。那么$p_1\top_2,p_2\top_3$,就有$p_1\top_3$,又有$p_3\top_4$,所以有$p_1\top_4$。以此类推,会发现$\foralli,j\in[1,k],i\not......
  • CF1900D Small GCD 题解
    原题链接:CF1900D,题意不多赘述。首先可以将\(a\)数组排序,并且枚举中间的那个数\(a_i\)。那么答案就是\(\sum_{j=1}^{i-1}\gcd(a_j,a_i)\times(n-i)\)。重点在于求前面的\(\gcd\)。可以用欧拉反演,但是也可以不用,因为我不会。假设我们当前已经枚举到了\(a_i\),设\(f_k\)表......
  • CF1900D Small GCD
    Link这是一个需要欧拉反演的题目首先,可以知道只和数字之间的大小有关,数列的顺序无关,那么就可以首先排一个序方便解决该问题。根据欧拉函数的性质,知道\(n=\sum_{d|n}\phi{(n)}\)那么我们每次先确定中间的数\(a_j\),然后根据公式,得他它得贡献是\(\sum_{i=1}^{j-1}gcd(a_{i},a_{j}......