首页 > 其他分享 >「模拟赛」暑期集训CSP提高模拟5(7.22)

「模拟赛」暑期集训CSP提高模拟5(7.22)

时间:2024-07-25 15:40:05浏览次数:14  
标签:cnt gtm1514 int 7.22 序列 字符串 now CSP 模拟

\(140pts, Rank24\)

题目列表:



简单的序列

\(100pts\)

题意:

gtm1514 不喜欢序列。但是一天他拿到了一个序列。

这个序列非常杂乱,于是 gtm1514 想要整理一下这个序列。但是由于他非常的菜,他只会进行一个操作:选择一个 \(ai\),把它变成 \(⌊\frac{a_i}2⌋\)。

gtm1514 又菜又爱摆,他想让你找到使得数列严格递增的最小操作次数。如果无解,输出 −1。

对于 100% 的数据,\(t≤10^4,n≤30,a_i≤2×10^9\)。

正解:

直接暴力即可,实际复杂度 \(O(t\ n \log_{2}{a_i})\)

将 \(i\) 从 \(n\) 到 1 遍历,每当遇到一个 \(i\) 使得 $a_i>=a_{i+1} $, 不断计算 $a_i= \lfloor {\frac{a_i}2} \rfloor $,直到 \(a_i<a_{i+1}\)。

code:

#include<bits/stdc++.h>
using namespace std;

const int N = 50;

int T, n, a[N];

int work(int &now, int ne){
	int cnt = 0;
	while(now >= ne){now /= 2, cnt++;}
	return cnt;
}

int main(){
	// freopen("in.in", "r", stdin); freopen("out.out", "w", stdout);

	scanf("%d", &T);
	while(T--)
	{
		scanf("%d", &n);
		for(int i=1; i<=n; i++){
			scanf("%d", &a[i]);
		}

		int ans = 0;
		for(int i=n-1; i>=1; i--){
			ans += work(a[i], a[i+1]);
			if(i != 1 and a[i] == 0){
				ans = -1;
				break;
			}
		}
		printf("%d\n", ans);
	}



	return 0;
}



简单的字符串

\(30 pts\),最唐的一次挂分

题意:

现在有一个字符串,但是它长得还是十分甚至九分混乱邪恶。gtm1514 想要整理一下这个字符串。

他发明了一个神奇的操作:一次操作使得字符串缩短一位,新字符串的第 i 位可以与原串的第 i 或 i+1 位相同。

他想知道最少经过多少次操作可以使整个字符串全相同,即只有一种字母。

赛时分析:

一眼有点感觉,可做。于是想想想,假假假。手模了半个小时之后不知道怎么着就想到正解了,突然就跳出来了。结果打完很开心地以为能 \(A\) 两个题了,结果 map 数组范围开错了......

正解:

每个英文字母的扩展的次数其实是它到与自己相同的字母的上一个位置的距离。

求出原每个位置上的前驱,然后枚举 26 个英文字母的所有位置,对于每一种英文字母,满足条件所需即为所有位置到前驱距离以及最后一个位置到原序列最后一个字母的距离的最大值,答案就是 26 个字母的所需的最小值。

code:

#include<bits/stdc++.h>
using namespace std;

const int N = 1e4 + 10;

int n;
char s[N];
// map<char, int>la;
int cnt[130][N], la[200];

int work(char c){
	int num = n - la[c];
	for(int i=1; i<=cnt[c][0]; i++){
		num = max(num, cnt[c][i] - cnt[c][i-1] - 1);
	}
	return num;
}

int main(){
	// freopen("in.in", "r", stdin); freopen("out.out", "w", stdout);

	cin>>(s+1);
	n = strlen(s+1);

	for(int i=1; i<=n; i++){
		// pre[i] = la[s[i]];
		la[s[i]] = i;
		cnt[s[i]][++cnt[s[i]][0]] = i;
	}

	int ans = N;
	for(char c='a'; c<='z'; c++){
		if(!cnt[c][0]) continue;
		ans = min(ans, work(c));
	}

	printf("%d", ans);

	return 0;
}

标签:cnt,gtm1514,int,7.22,序列,字符串,now,CSP,模拟
From: https://www.cnblogs.com/YuenYouth/p/18322147

相关文章

  • CSP 2023 Round 2 游记
    Day?最近\(WHK\)下滑严重,月考排名掉到了\(50\)多了,想着等着这次\(CSP\)完就先退役,也就没想着拿奖去复习。Day0考前周五没怎么搞\(OI\),学校作业多到爆炸,晚自习老师一直讲课,都要睡着了,完事和WSL一起散散步就出校门了,结果WSL却跑回去跑800,说是为了运动会(,卷神。Day1-......
  • CSP 模拟 4
    T1WhiteandBlack原题ARC148CLightsOutonTree最小和无解都不用管,不能下改上,所以从上往下,遇到就反转。一定的观察后发现,当这个点的颜色与父亲不同时,会有贡献,然后直接就做完了。点击查看代码#include<bits/stdc++.h>typedeflonglongll;typedefunsignedlonglong......
  • CSP 模拟 3
    joke3579场,T1abc猜想([ARC111A]SimpleMath2)直接\(\bmod\c\),很难做,不难想到换一个和\(c\)有关的模数,\(c^2\)很好,因为它除以\(c\)再模上\(c\)后为\(0\)。求\(x=a^b(\bmod\c^2)\),\(a^b=k\cdotc^2+x\),除以\(c\)模\(c\)后,前面那个东西没了,只剩\(x\),所以答......
  • eve-NG网络环境模拟神器
    一个看着很像计网实验的一个万能模拟工具。下载https://www.eve-ng.net/index.php/download/安装导入eve镜像之前需要安装一些软件。SecureCRT:用来连接telnet的MobaXterm:类似xshell的工具EVE-NG-Win-Client-Pack-2.0:主要是用于Wireshark抓包直接去官网下载即可https://e......
  • can环境模拟+重放攻击+逆向分析
    安装ICSimsudoaptinstalllibsdl2-devlibsdl2-image-devcan-utilsmavenautoconf-y#下载ICSimgitclonehttps://github.com/zombieCraig/ICSim.git#编译安装cdICSim/sudomake安装socketcand#下载socketcandgitclonehttps://github.com/linux-can/socket......
  • ccfcsp 201803.2 碰撞的小球 100分代码
    本题是一道小模拟规模小难度在碰撞检测在写模拟题时的思路应该是先找到应该储存的信息是哪些,抽象出来,应该模拟的方法是哪些。类似oop。includeusingnamespacestd;constintL=1000;structball{intp;chard=1;//只可能为1或-1,表示方向}b[L+1];intmain(){int......
  • YC322A [ 20240724 CQYC NOIP 模拟赛 T4 ] 庫的 序计数(counting)
    题意给定一棵树\(T\),每次操作在某个点下方接上\(k\)个儿子。询问期望多少次排列,使得\(a_{fa_i}<a_i\)。保证\(k\)是偶数,对\(65536\)取模。\(n\le10^5,k\le2\times10^9\)。Sol考虑假如已经确定了一棵树的形态,如何求出最终的答案?可以发现对于每一个节点......
  • 「模拟赛」暑期集训CSP提高模拟4(7.21)
    很祭的一次比赛,啥也不会。题目列表:A.WhiteandBlackB.WhiteandWhiteC.BlackandBlackD.BlackandWhiteA.WhiteandBlack\(0pts\)题意:给你一颗树,树根为1,初始所有点都是白色,每次询问给出一个点集,若把点集中的点全部染成黑色,问至少需要翻转多少个节点才能使整......
  • 2024.7.22模拟赛5
    模拟赛咕了两天才发现少了一天的题解。T1MakeItIncreasing水。code#include<bits/stdc++.h>usingnamespacestd;constintN=40;#defineLLlonglongintt,n;LLa[N];intmain(){// freopen("in.in","r",stdin);// freopen("out.out",&......
  • 暑假集训CSP提高模拟6
    赛时在\(T2\)浪费时间太多,导致\(T4\)暴力没时间想了,总是想把\(T2\)这种题当大型分讨来做A.花间叔祖[ARC148A]modM观察性质可以发现,答案要么是1,要么是2,把是1的情况找出来剩下的就是2。考虑什么时候是1,如果一个数列模上一个数结果相同,那么他们的差一定是这个模数的整......