首页 > 其他分享 >CF ER147 div.2

CF ER147 div.2

时间:2023-04-22 19:57:28浏览次数:38  
标签:ER147 10 int cin CF -- ans div.2 sim

A

  简单计数题,判断前导零。

#include <bits/stdc++.h>
using namespace std;
int T;
int main(){
	cin >> T;
	while(T --){
		char s[10];
		cin >> s;
		int n = strlen(s);
		int ans = 1;
		for(int i = 0; i < n; i++){
			if(s[i] == '?' && i == 0) ans = 9;
			else if(s[i] == '?') ans *= 10;
		}
		if(s[0] == '0') ans = 0;
		cout << ans << endl;
	}
	return 0;
}

B

  这题还比较有意思,这里从逻辑上进行讲解。
首先,对于 \(l\sim r\) 是答案的充分条件: \(a[l] \ne b[l]\) \(and\) \(a[1\sim l-1] = b[1 \sim l-1]\),对于 \(r\) 同理。
再考虑 \(l\sim r\) 是答案的必要条件: \(a[l\sim r]\) 单调递增。
于是我们先通过充分找出差值最小的 \(l,r\) 的取值,再通过必要条件找出其差值最大的取值,即为答案。

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int T, n;
int a[N], b[N];
int main(){
	cin >> T;
	while(T --){
		scanf("%d", &n);
		for(int i = 1; i <= n; i++)
			scanf("%d", &a[i]);
		for(int i = 1; i <= n; i++)
			scanf("%d", &b[i]);
		int l = 1, r = n;
		while(l < r){
			if(a[l] == b[l]) l ++;
			else if(a[r] == b[r] && r > l) r --;
			else break;
		}
		while(l > 1 && b[l - 1] <= b[l])
			l --;
		while(r < n && b[r + 1] >= b[r])
			r ++;
		printf("%d %d\n", l, r);
	}
	return 0;
}

C

  对于一段长为 \(n\) 的序列,我们想消除需要用 \(log_2 n\) 次,于是对于每个字母进行考虑,暴力即可完成。

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int T, n, a[N];
int cnt[30];
int main(){
	cin >> T;
	while(T --){
		memset(cnt, 0, sizeof cnt);
		char ch[N]; cin >> ch;
		n = strlen(ch);
		for(int i = 1; i <= n; i++){
			a[i] = ch[i - 1] - 'a', cnt[a[i]] ++;
		}
		int ans = N;
		for(int aim = 0; aim < 26; aim++){
			if(!cnt[aim]) continue;
			int maxn = 0, lst = 0;
			for(int i = 1; i <= n; i++)
				if(a[i] == aim)
					maxn = max(maxn, i - lst - 1), lst = i;
			maxn = max(maxn, n - lst);
			int res = 0;
			while(maxn){
				res ++;
				maxn >>= 1;
			}
			ans = min(ans, res);
		}
		cout << ans << endl;
	}
	return 0;
}

D

 通过手玩样例不难发现,对于长度为 \(1\) 的区间,我们可以不取它用以减少答案 \(2\) 次,那么可以多往前走一步。
同理,长度大于 \(1\) 的区间必须要取,因为不能优化答案。我们通过顺序遍历判断是否可以通过减少长度为 \(1\) 的区间优化答案即可。

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int T, n, k;
int l[N], r[N];
int main(){
    int T;
    cin >> T;
    while(T--){
        int n, k;
        cin >> n >> k;
        for(int i = 1; i <= n; i++)
        	scanf("%d", &l[i]);
        for(int i = 1; i <= n; i++)
        	scanf("%d", &r[i]);
        int sum = 0;
        for(int i = 1; i <= n; i++)
        	sum += r[i] - l[i] + 1;
        if(sum < k){
        	puts("-1");
        	continue;
		}
        int ans = 0x3f3f3f3f, cnt = 0, less = 0;
        for(int i = 1; i <= n; i++){
            if(r[i] == l[i]) less ++;
            cnt += r[i] - l[i] + 1;
            if(cnt >= k){
                int more = cnt - k;
                int res = r[i] - more + 2 * i - min(more, less);
                ans = min(ans, res);
            }
        }
        printf("%d\n", ans);
    }
	return 0;
}

标签:ER147,10,int,cin,CF,--,ans,div.2,sim
From: https://www.cnblogs.com/P32sx-qq1309267816-tel18081238250/p/17343774.html

相关文章

  • 题解:【CF235D】Graph Game
    题目链接根据期望的线性性,一次操作使得接下来要递归处理\(|G|\)个点,将这些贡献分摊到\(|G|\)个点上,这样我们接下来只需要计算概率。首先考虑如果是树怎么做。操作等价于随机一个排列,顺次删掉排列中的点,并求出删掉当前点之前其所处的连通块的大小。记当前\(x\)为点分治中心......
  • CF1716D
    ChipMove-洛谷|计算机科学教育新生态(luogu.com.cn)背包DP:这道题与完全背包不一样的地方便是:至少要拿一个物品。DP[i,j]为前i个物品,每个至少拿一个,体积为j时的方案数转移方程:DP[i,j]=DP[i-1,j-w[i]]+DP[i,j-w[i]](具体见蓝书P277)然后用滚动数组优化空间复杂度由于是滚......
  • PCF8591 AD/DA转换基于51
    #include<reg52.h>#include<intrins.h>//内部有_nop_();//IIC模拟时序实现//注意:SCL为高电平时变化SDA数据是起始或者终止信号;所以若不是起始或者终止信号,需要在SCL为低电平时变化SDA数据sbitSDA=P2^0;sbitSCL=P2^1;sbitLED=P2^3;sbitwei=P2^6;sbitdu......
  • Devu and Flowers CF451E
    Devu有n个花瓶,第ii个花瓶里有fi朵花。他现在要选择s朵花。你需要求出有多少种方案。两种方案不同当且仅当两种方案中至少有一个花瓶选择花的数量不同 #include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintM=1<<20,mod=1e9......
  • WCF教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介Windows通讯开发平台(WindowsCommunicationFoundation,简称WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows通讯开发平台。整合了原有的windows通讯的.netRemoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。是Windows平台上开发分布......
  • CS 期刊哪家强?CCF 发布最新期刊分级目录!
    文|python分级目录中国计算机学会(CCF,就是评ABC类会议的那个机构),在2022年2月19日刚刚发布了《计算领域高质量科技期刊分级目录》。该目录包含T1、T2、T3三类期刊,分别为T1类期刊16本,T2类期刊23本,T3类期刊29本。(点击阅读原文查看完整列表)据卖萌屋笔者仔细比对,就具体内容而言,这次的期......
  • CF笔记
    https://codeforces.com/problemset/problem/1819/B分析:总面积总是不变的考虑第一刀横着劈开这样一块宽度是最大的同理竖着劈开高度是最大的这样两种情况通过算面积能够求出剩下的长宽度考虑贪心对于剩下的块如果有长宽相匹配的就直接匹配顺序不重要特别的如果两次......
  • 重磅 | Shifu物联网开发框架成为CNCF认证项目
    近日,边无际Shifu项目被收录进CNCF云原生全景图,成为了云原生计算基金会认证的项目之一。此次收录证明了Shifu具备了符合CNCF标准的技术能力和良好的社区发展,展现了Shifu在云原生计算领域的实力和可信度,巩固了Shifu在云原生领域的地位。作为CNCF认证项目,Shifu将会有更多机会为AIoT开......
  • CF 580C- Kefa and Park, 1500 / 树的遍历 / 根节点到叶节点的路径上某性质的点不能
    CF580C-KefaandPark这个1500的题这么水?这还不如1200、1300的思维题我开始没考虑周全,这题给出的连边没有讲都是从父节点连向子节点,所有要建双边。#include<iostream>#include<cstring>usingnamespacestd;constintN=1e5+10,M=N*2;typedeflonglon......
  • CF1797E 线段树 + 倍增 题解
    Preface有趣的一道ds,赛后不看题解做出来了。Solution首先有一个性质:\(\varphi(x)\)经过\(\mathcal{O}(\logx)\)次迭代后变为\(1\)。证明:若\(x\)为奇数,\(\varphi(x)=x\sum_{i=1}^{k}\frac{p_i-1}{p_i}\),\(p_i\)为奇数,所以\(p_i-1\)为偶数,我们就能得到\(\varphi(x)......