首页 > 其他分享 >每日一题- CF1995D

每日一题- CF1995D

时间:2024-07-27 15:19:14浏览次数:9  
标签:std cnt int 每日 CF1995D 一题

唐氏小状压

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&-(x))
int t,n,c,k,cnt[(1<<18)+5][35];
bool f[(1<<18)+5];
char s[(1<<18)+5];
int calc(int x){
	int res=0;
	while(x)x^=lowbit(x),res++;
	return res;
}
void init(){
	for(int i=0;i<(1<<c);i++)f[i]=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=c;j++)
			cnt[i][j]=0;
}
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d",&n,&c,&k);
		scanf("%s",s+1);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=c;j++)
				cnt[i][j]=cnt[i-1][j]+(s[i]==j+'A'-1);
		for(int i=0;i<=n-k;i++){
			int st=0;
			for(int j=1;j<=c;j++)
				if(cnt[i+k][j]-cnt[i][j]>=1)
					st|=1<<(j-1);
			f[((1<<c)-1)^st]=1;
		}
		f[((1<<c)-1)^(1<<(s[n]-'A'))]=1;
		for(int i=(1<<c)-1;i>=0;i--)
			for(int j=0;j<c;j++)
				f[i]|=f[i|(1<<j)];
		int res=1e9;
		for(int i=0;i<(1<<c);i++)
			if(!f[i])
				res=min(res,calc(i));
		printf("%d\n",res); 
		init();
	}
	return 0;
}

标签:std,cnt,int,每日,CF1995D,一题
From: https://www.cnblogs.com/kentsbk/p/18327002

相关文章

  • 每日一题-CF1996G Penacony
    异常明显的思路,考场上却不会,连确定一条边不选都没想到#include<bits/stdc++.h>usingnamespacestd;#definepiipair<int,int>#definefifirst#definesesecond#definempmake_pair#definels(rt<<1)#definers(rt<<1|1)#definemid(l+r>>1)intt,n,m......
  • 7.26每日一练
    1.学生管理系统(增删改查)#include<stdio.h>#include<string.h>intmain(intargc,constchar*argv[]){ intnum=0; inta=0,b=0,c=0; inti,j; intm,n; charadd1[30],add2[30],add3[30]; ints,sub,x,y; charmod[30]; intex; intlen1,len2,len3;......
  • 每日OJ_牛客_合法括号序列判断
    目录牛客_合法括号序列判断解析代码牛客_合法括号序列判断合法括号序列判断__牛客网解析代码        用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有左括号,如果有则出栈,如果没有,则说明不匹配。classParenthesis{public:boolchkPare......
  • 每日一题:Leetcode-32 最长有效括号
    力扣题目解题思路java代码力扣题目:给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例1:输入:s="(()"输出:2解释:最长有效括号子串是"()"示例2:输入:s=")()())"输出:4解释:最长有效括号子串是"()()"示例3:输入:s=""......
  • 每日一面—— 不使用任何中间变量如何将a、b的值进行交换
    请参考以下C++程序代码。1#include<stdio.h>23voidswap1(int&a,int&b)4{5inttemp=a;//使用局部变量temp完成交换6a=b;7b=temp;8};910voidswap2(int&a,int&b)11{12a=a+b;//使用加减运算完成交换13b=a-b;14......
  • 2024.7.22每日笔记,有错望指出
    //5、求125之内自然数中偶数之和。#include<stdio.h>intmain(){inti=0;intsum=0;for(i=0;i<=125;i++){if(i%2==0){sum=sum+i;printf("%d\n",sum);}}return0;}//7、编程计算1......
  • python每日学习:numpy库的用法(上)
    python每日学习10:numpy库的用法(上)下载numpy库pipinstallnumpy检测环境是否安装importnumpyimportnumpyasnpa=np.arange(10)print(a)array创建数组名称描述dtype数组元素的数据类型,可选copy对象是否需要复制,可选order创建数组的样式,C为行方向,F为列方向,A......
  • 每日一题-P1344
    本来求边数又建了个图跑流,然后看题解发现直接流量置为A*w+1(A为足够大的数)感觉很强#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintA=1e5;constllinf=1e18;intn,m,s,t;structedge{ intv;llw;intnx;}e[10005];intcnt,hd[205],cur[......
  • 单调栈(每日温度)
    每日温度https://leetcode.cn/problems/daily-temperatures/description/可以维护一个存储下标的单调栈,从栈底到栈顶的下标对应的温度列表中的温度依次递减。如果一个下标在单调栈里,则表示尚未找到下一次温度更高的下标。正向遍历温度列表。对于温度列表中的每个元素temperatu......
  • 第四十八天 第十章 单调栈part01 739. 每日温度 496.下一个更大元素 I 503.下一个更大
     739.每日温度 使用单调栈:注意栈中的递增递减顺序。classSolution{public:vector<int>dailyTemperatures(vector<int>&temperatures){vector<int>res(temperatures.size(),0);stack<int>sta;sta.push(0);for(int......