2024.3.28abc晚训题解

news/2024/7/15 17:18:37 标签: 图论

VJ晚训网址点击传送晚训

A题
比较巧的输入方式就是循环n,内层套一个循环7

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		int ans=0;
		for(int j=1;j<=7;j++){
			int x;
			cin>>x;
			ans=ans+x;	
		}
		cout<<ans<<" ";
	}
	return 0;
}

B题
利用string会比较好做,因为可以直接拼接,拼接以后判断回文即可


#include<bits/stdc++.h>
using namespace std;
string s[110];
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	for(int i=1;i<=n;i++){
		string now;
		for(int j=1;j<=n;j++){
			if(i==j)continue;
			now=s[i]+s[j];
			int len=now.size();
			bool ok=1;  
			for(int k=0,p=len-1;k<p;k++,p--){
				if(now[k]!=now[p]){
					ok=false;
					break;
				}
			}
			if(ok){
				cout<<"Yes";return 0;
			} 
		}
	}
	cout<<"No";
	return 0;
}

C题
这是一个非常经典的括号匹配题目,我们可以不断的存入非右括号字符到数组(手动模拟栈的思想)
记录存入了多少个可以使用的左括号。当我们遇到右括号时,判断前面有没有能用的左括号,如果有那么就不断删除数组尾部的字符,直到我们遇到左括号,也要删除,并且左括号数量-1.如果前面没有可以用的左括号,那么就把右括号也存入数组尾部。


#include<bits/stdc++.h>
using namespace std;
char s[200005];
char op[200005];
int main(){
	int n;
	cin>>n;
	cin>>s+1;
	int len=0;
	int num=0;
	for(int i=1;i<=n;i++){
		if(s[i]!=')'){
			if(s[i]=='(')num++;
			op[++len]=s[i];
		}
		else{
			if(num==0){
				op[++len]=s[i];
			}
			else{
				while(op[len]!='('){
					len--;
				}
				len--;
				num--; 
			}
		}
	}
	for(int i=1;i<=len;i++){
		cout<<op[i];
	}
	return 0;
}

D题
简单语法题

#include<bits/stdc++.h>
using namespace std;
char s[200005];
int main(){
	int n;
	cin>>n;
	cin>>s+1;
	for(int i=1;i<=n;i++){
		cout<<s[i]<<s[i];
	}
	return 0;
}

E题
简单计算题,注意long long int本题不够用

#include<bits/stdc++.h>
using namespace std;
int main(){
	unsigned long long ans=0;
	unsigned long long base=1;
	for(int i=1;i<=64;i++){
		int x;
		cin>>x;
		if(x==1)ans=ans+base;
		base=base*2;
	}
	cout<<ans;
	return 0;
}

F题
首要要读懂题意
意思就是3*N个数,值域是1–N,只会出现三次
题目的F(i)函数指的是值为i的数字出现的第二次的下标 ,排序所有F(i)以后依次输出对应的i

#include<bits/stdc++.h>
using namespace std;
int vis[100005];
struct pe{
	int pos;	
	int vel;
}f[100005];
bool cmp(pe x,pe y){
	return x.pos<y.pos;
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=3*n;i++){
		int x;
		cin>>x;
		vis[x]++;
		if(vis[x]==2){
		f[x].pos=i;
		f[x].vel=x;
		}
	}
	sort(f+1,f+1+n,cmp);
	for(int i=1;i<=n;i++){
		cout<<f[i].vel<<" ";
	}
	return 0;
}

G题
简单递推题(或者说动态规划吧)
我们考虑第i天的状态,要么无毒要么中毒了
定义dp[i][0] 表示第i天吃饭结束后状态为无毒的最大美味度和
定义dp[i][1] 表示第i天吃饭结束后状态为有毒的最大美味度和

对于第i天的菜如果是解毒的,考虑吃还是不吃的问题

如果吃了,那么第i天一定会是无毒的,考虑dp[i][0]可以由昨天怎么变过来?
可以由昨天有毒吃今天的菜 或者 昨天无毒吃今天的菜 的状态转移过来
如果不吃,那么第i天想要无毒状态只能是从昨天的无毒状态转移过来

对于第i天的菜是有毒的,考虑如何吃的问题
我们可以从昨天无毒吃,也可以从昨天有毒今天不吃状态转移,当然最终都是今天中毒的情况
今天也可以不中毒,那就是不吃今天的菜,从昨天无毒转移过来

#include<bits/stdc++.h>
using namespace std;
long long int dp[300005][3];
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		int x,y;
		cin>>x>>y;
		if(x==0){//当前解毒 
			dp[i][0]=max(max(dp[i-1][0]+y,dp[i-1][1]+y),dp[i-1][0]);
			dp[i][1]=dp[i-1][1];//若保持当前毒状态,那么本次就不吃 
		}
		else{//当前有毒 
			dp[i][1]=max(dp[i-1][0]+y,dp[i-1][1]);
			dp[i][0]=dp[i-1][0];
		}
	}
	cout<<max(dp[n][0],dp[n][1]);
	return 0;
}


http://www.niftyadmin.cn/n/5456360.html

相关文章

妙手ERP正式接入俄罗斯电商平台wildberries,支持高效上货、批量订单处理!

近几年&#xff0c;俄罗斯电商市场高速增长&#xff0c;放眼未来&#xff0c;这样的增长还将持续。根据Statista预测&#xff0c;到2027年俄罗斯电商市场规模将达到15万亿卢布&#xff0c;俄罗斯电商市场发展仍有广阔的发展空间。 来源&#xff1a;Statista 核心电商平台的发展…

Vue类与样式绑定,深入理解

Class 与 Style 绑定 数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。因为 class 和 style 都是 attribute&#xff0c;我们可以和其他 attribute 一样使用 v-bind 将它们和动态的字符串绑定。但是&#xff0c;在处理比较复杂的绑定时&#xff0c;通过拼接…

蚂蚁庄园今日答案

蚂蚁庄园是一款爱心公益游戏&#xff0c;用户可以通过喂养小鸡&#xff0c;产生鸡蛋&#xff0c;并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料&#xff0c;使用鸡饲料喂鸡之后&#xff0c;会可以获得鸡蛋&#xff0c;可以通过鸡蛋来进行爱心捐赠。其中&#…

Java小课堂 第二章 变量与运算符(下)

2.6、数据类型转换【重点】 2.6.1、自动类型转换 取值范围小的类型自动转换为取值范围大的数据类型。 数据类型按取值范围大小排序为&#xff1a; 有多种类型的数据混合运算时&#xff0c;系统首先自动将所有数据转换成容量最大的那种数据类型&#xff0c;然后再进行计算。 …

访问学者如何申请国外信用卡?

作为一名访问学者&#xff0c;如果你计划在国外长期居住或短期停留&#xff0c;并希望申请国外信用卡&#xff0c;这可能是一个相当实用的工具。国外信用卡不仅可以帮助你在海外购物和旅行时更加便利&#xff0c;还能建立起你在国际金融体系中的信用记录&#xff0c;为未来的金…

前端实现浏览器自定义滚动条

前言&#xff1a; 最近有个项目&#xff0c;产品觉得浏览器默认滚动条太丑了。想美化一下&#xff0c;比如自定义颜色&#xff0c;加上圆角&#xff0c;宽高都要更改一下。我查了资料和文档总结了一下 写法&#xff0c;特此记录以便之后使用。 浏览器滚动条api 总结&#xff…

并查集算法的详细解释

并查集算法&#xff08;Disjoint Set Union&#xff0c;简称DSU&#xff09;是一种用于处理集合合并和查询的数据结构和算法。它主要用于解决集合的不相交性和合并操作。 在并查集中&#xff0c;每个元素都属于一个集合&#xff0c;并且每个集合有一个代表元素&#xff0c;通常…

CAS中的ABA问题

ABA 问题是指在并发编程中&#xff0c;一个值从 A 变成 B&#xff0c;然后再变回 A&#xff0c;而导致误判的问题。在 CAS&#xff08;Compare and Swap&#xff09;等原子操作中&#xff0c;由于线程间的竞争&#xff0c;可能会发生 ABA 问题。 为了解决 ABA 问题&#xff0c…