首页 > 其他分享 >10月16日 CSP-S

10月16日 CSP-S

时间:2024-10-16 22:09:58浏览次数:1  
标签:10 16 int S1 len len1 dfs tofa CSP

T1 小w的爱情密码

【问题描述】

小W终于鼓起勇气向小M表白,然而只是有勇气写情书。

为了防止情书内容被同学窃取,小W给情书加密。

小M的解密方式很简单,假设情书是字符串S1,小W给她的解密串是 S2,小M会重复地完成“在S1中找到子串S2并删除”这一操作直到在 S1 中找不到S2。

假如你是小M,请你确定情书的最终内容。

【输入格式】
第一行一个字符串 S1。

第二行一个字符串 S2。

【输出格式】
一行一个字符串 S,表示最终内容。

对于 30% 的数据,保证Length(S1) <= 1000。

对于 100% 的数据,保证Length(S1) <= 10^6,

Length(S2) <= 100。字符都是小写字母。

100pts:

这是一道标准的贪心。

其实它的难点在于你需要用一个数组存这个东西,还有证明贪心。

遍历S1,将这个字符加入一个数组a,然后每加入一次就判断最后面s2.size()个是否能消掉。

因为消掉一次之后就不会再出现新的情况了,所以这个方法是正确的。

code:

#include<bits/stdc++.h>
using namespace std;
string s,t;
vector<char> a;
int main(){
//	freopen("censor.in","r",stdin);
//	freopen("censor.out","w",stdout);
	cin>>s>>t;
	for(int i=0;i<s.size();i++){
		a.push_back(s[i]);
		int j=a.size()-1;
		if(j<t.size()-1) continue;
		for(int k=t.size()-1;k>=0;j--,k--){
			if(t[k]!=a[j]){
				break;
			}
			if(k==0){
				for(int k=1;k<=t.size();k++){
					a.pop_back();
				}
			}
		}	
	}
	for(int i=0;i<a.size();i++){
		cout<<a[i];
	}
} 

T2 飞船监控站

coding...

T3 旅游规划

【问题描述】
W市的交通规划出现了重大问题,市政府下决心在全市的各大交通路口安排交通疏导员来疏导密集的车流。但由于人员不足,W市市长决定只在最需要安排人员的路口安放人员。具体说来,W市的交通网络十分简单,它包括n个交叉路口和n-1条街道,任意一条街道连接两个交叉路口,并且任意两个交叉路口之间都存在一条路径互相连接。经过长期调查结果显示如果一个交叉路口位于W市交通网的最长路径上,那么这个路口必然拥挤不堪,所谓最长路径定义为某条路径p=(v1,v2,v3…vk),路径经过的路口各不相同且城市中不存在长度>k的路径(因此可能存在着不唯一的最长路径)。因此W市市长希望知道有哪些路口位于城市交通网的最长路径之上。

【输入格式】
第一行包括一个整数n。

之后的n-1行每行包括两个整数u, v表示编号为u和v的路口之间存在着一条街道(注意:路口被依次编号为0到n-1)

【输出格式】
输出包括若干行,每行包括一个整数——某个位于最长路上路口的编号。

为了确保解唯一,我们规定位于所有最长路上的路口按编号顺序从小到大输出。

【数据范围及约定】
对于50%的数据保证n<=1000

对于100%的数据保证n<=200000

50pts

暴力换根+dfs,轻松50。(虽然我赛时爆0了)

不过多赘述

100pts

把暴力换根优化一下,记录每一个点距离根节点的长度(用于计算),再记录每一个点的深度。

最后找最大的节点的最大的两条路径就结束了。

code:

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

const int N = 200010, M = N << 1;
vector<int> a[N];
int len1[N], len2[N], tmp[N], tofa[N];
int n, maxd;

void dfs_len(int u, int fa) {
	for (int i = 0; i < a[u].size(); i++) {
		int j = a[u][i];
		if (j != fa) {
			dfs_len(j, u);
			int len = len1[j] + 1;
			if (len > len1[u]) len2[u] = len1[u], len1[u] = len, tmp[u] = j;
			else if (len > len2[u]) len2[u] = len;
		}
	}
	maxd = max(maxd, len1[u] + len2[u]);
}

void dfs_tofa(int u, int fa) {
	for (int i = 0; i < a[u].size(); i++) {
		int j = a[u][i];
		if (j != fa) { 
			tofa[j] = tofa[u] + 1;
			if (tmp[u] != j) tofa[j] = max(tofa[j], len1[u] + 1);
			else tofa[j] = max(tofa[j], len2[u] + 1);
			dfs_tofa(j, u);
		}
	}
}

int main() {
	cin >> n;
	for (int i = 0; i < n - 1; i++) {
		int x, b;
		cin >> x >> b;
		a[x].push_back(b);
		a[b].push_back(x);
	}
	dfs_len(0, -1);
	dfs_tofa(0, -1);
	for (int i = 0; i < n; i++) {
		int len[3] = { len1[i], len2[i], tofa[i] };
		sort(len, len + 3);
		if (len[1] + len[2] == maxd) cout << i << endl;
	}
	return 0;
}

T4 分组行动

coding...

标签:10,16,int,S1,len,len1,dfs,tofa,CSP
From: https://www.cnblogs.com/hmzcoding/p/18471052

相关文章

  • 20241016每日一题洛谷P1115
    普及-洛谷P1115最大子段和读题可知需要在一段一维数组中寻找一段唯一的区间,使区间内的数和最大,即寻找和最大区间可以想到前缀和的算法假设输入数组a[n]则前缀和数组b[n]=b[n-1]+a[n]那么从什么时候开始的一段区间才能使区间内的数和最大?从前缀和数组逐步来判断这一条......
  • 2023年 10月自考《软件开发工具》03173试题
    目录一.单选题二.填空题三.简答题四.应用题一.单选题1.软件对可维护性、可重用性的要求越来越高,这是因为A.客观世界的复杂性B.软件的多样性C.客观世界的动态性D.软件的规模性2.时序网络用户描述 P58页A.数据内容B.程序执行的逻辑过程C.数据结果D.系统状态及......
  • 2024.10.16 近期练习
    CF1442DSum很显然可以设\(f_{i,j}\)表示当前处理了前\(i\)个数组,选了\(j\)个数的最大值,然而转移需要\(O(k)\)。考虑挖掘题目数据元素非降的性质。猜个结论呢?因为元素是逐渐变大的,所以越往后选就一定越优。所以,至多只有一个数组没有被选完。这个很像NF0921D。考虑分治......
  • 2024.10.16 鲜花
    PRAGMATISM-RESURRECTION凭什么没词就不是好歌!!!取模优化就不讲怎么减少取模了。比较广为流传的有两种,Barrettreduction,MontgomeryAlgorithm。对于固定常数模数,计算机已经优化的很好了,一般不会有太大效果(确实有,用Barrettreduction有时可以卡常)。对于输入的固定模数(即......
  • 20241016 模板清理
    区间DP-回文字串记\(f[i][j]\)表示把\(s[i\simj]\)变成回文,最少补几个,从\(f[i][j-1],f[i+1][j],f[i+1][j-1]\)三种情况转移过来即可。感性理解一下这样的状态定义是有最优子结构的。区间DP-合唱队肯定可以区间\(dp\),再注意到状态的转移和上一步有关,所......
  • 10.16学习日志
    一.Python函数1.定义一个函数什么是函数函数是可以重复执行的语句块,可以重复调用作用用于封装语句块,提高代码的重用性。函数是面向过程编程的最小单位1.1def语句作用用来定义(创建)函数语法说明函数代码块以def关键词开头,后接函数标识符名称和圆括......
  • 2024.10.16 模拟赛
    2024.10.16模拟赛T1divide简要题意给定一棵树的\(n\)个结点以及每个结点的\(fa_i\),每个点的点权\(v_i\),删除树中的两条边,将树拆分为三个非空部分。每个部分的权值等于该部分包含的所有节点的权值之和。出一种合理的拆分方案。根节点的\(fa_i=0\)\(n≤10^6\)solution......
  • Kylinv10 curl报错:SSLv3_client_method version OPENSSL_1_1_0 not define
    curl http://127.0.0.1出现问题#curlhttps://www.example.comcurl:relocationerror:/lib64/libcurl.so.4:symbolSSLv3_client_methodversionOPENSSL_1_1_0notdefinedinfilelibssl.so.1.1withlinktimereference错误是/usr/lib64中的动态链接中无法识别......
  • 2024CSP-J模拟赛9————S12678
    一,赛中得分T1100T2100T350T440总分290二,赛中概括  T1T2较快过,T3T4骗了90分(意料之中,这么好骗分!!!)。三,题目解析涂格子(paint)问题描述现在有一个 n 行 m 列的网格纸,一开始每个格子都是白色的。现在你可以任意挑选恰好 x 行和 y 列,将挑......
  • 2-STM32F103+ML307(中移4G Cat1)OTA升级篇(自建物联网平台)-STM32通过ML307使用http或
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/ML307/myota.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明前面......