2024.3.15abc晚训题解

news/2024/5/20 0:10:27 标签: 推荐算法, 算法, c++

晚训视频讲解3.15晚训视频讲解
晚训网址https://vjudge.net/contest/615489

A题参考程序

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

B题参考程序

#include<bits/stdc++.h>
using namespace std;
int pos[110];
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		pos[x]=i;
	}
	int q;
	cin>>q;
	while(q--){
		int x,y;
		cin>>x>>y;
		if(pos[x]<pos[y])cout<<x;
		else cout<<y;
		cout<<'\n';
	}
	return 0;
}

C题解题思路
因为涉及到Q次修改,我们最终关心的是S字符串里面的每个字符从一开始到最后到底变成什么了,可以用标记数组来解决。定义vis[i]=i ,表示一开始所有第i个字母最终都变成了第i个小写字母。每次修改的时候,把c[i]字符改编成d[i]时,涉及到一个问题,那就是经过若干次修改变化后,我们可能一开始多个vis[i] 都变成了同一个字母,所以说每次修改的时候要判断一下26个字母里面当前变成c[i]的哪几个,然后都修改成 d[i] 。最终输出的时候按照vis[]字母表输出。

#include<bits/stdc++.h>
using namespace std;
int vis[30];
char s[200005];
int main(){
	int n;
	cin>>n;
	cin>>s+1;
	int q;
	cin>>q;
	for(int i=1;i<=26;i++){
		vis[i]=i;
	}
	while(q--){
		char x,y;
		cin>>x>>y;
		int a=x-'a'+1;
		int b=y-'a'+1;
		for(int i=1;i<=26;i++){
			if(vis[i]==a)vis[i]=b;
		}
	}
	for(int i=1;i<=n;i++){
		cout<<char(vis[s[i]-'a'+1]-1+'a');
	}
	return 0;
}

D题参考程序

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	n=n*2+1;
	for(int i=1;i<=n;i++){
		cout<<i%2;
	}
	return 0;
}

E题参考程序

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

F题参考程序(暴力检查即可)

#include<bits/stdc++.h>
using namespace std;
char s[502][502];//地图 
char op[502];//移动字符串
int h,w,n;
bool check(int x,int y,int now){
	if(x<1||y<1||x>h||y>w)return false;//越界
	if(s[x][y]=='#')return false;//一定要先判断越界 
	if(now==n+1)return true;
	//从s[x][y]出发,检查执行第now步操作能不能行  
	if(op[now]=='L')return check(x,y-1,now+1);
	if(op[now]=='R')return check(x,y+1,now+1);
	if(op[now]=='U')return check(x-1,y,now+1);
	if(op[now]=='D')return check(x+1,y,now+1);			
	
} 
int main(){
	cin>>h>>w>>n;
	cin>>op+1;
	for(int i=1;i<=h;i++){
		cin>>s[i]+1;
	}
	int ans=0;//答案 
	for(int i=1;i<=h;i++){
		for(int j=1;j<=w;j++){
			if(s[i][j]=='#')continue;
			if(check(i,j,1)==true){
				ans++;				
			}
		}
	}
	cout<<ans;
	return 0;
}

G题思路
按照个 十 百 千 拆分即可

#include<bits/stdc++.h>
using namespace std;
int A[10];
int main(){
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		int len=0;
		int base=1;//单位 
		while(n!=0){
			int now=n%10;
			if(now!=0){
				A[++len]=now*base;
			}
			base=base*10;
			n=n/10;
		}
		cout<<len<<'\n';
		for(int i=1;i<=len;i++){
			cout<<A[i]<<" ";
		}
		cout<<'\n';
	}
	return 0;
} 

H题参考程序

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t;
	cin>>t;
	while(t--) {
		int n,k;
		cin>>n>>k;
		int now=n-k;
		if(n-k<0) { //先判断能不能拆1 
			cout<<"No"<<'\n';
			continue;
		} else { 
			if(now%2==0) { //如果能拆1判断  能不能摆上去 
				cout<<"Yes"<<'\n';
				cout<<1+now<<" ";
				for(int i=1; i<k; i++) {
					cout<<1<<" ";
				}
				cout<<'\n';
				continue;
			} else { //拆1 摆不上去 试试拆2 
				now=n-2*k;
				if(now<0) {
					cout<<"No"<<'\n';
					continue;
				} else {
					if(now%2==0) {
						cout<<"Yes"<<'\n';
						cout<<2+now<<" ";
						for(int i=1; i<k; i++) {
							cout<<2<<" ";
						}
						cout<<'\n';
						continue;
					}
					else{ // 拆1 拆2 都无解就是NO 
					cout<<"No"<<'\n';
					continue;	
					}
				}
			}
		}
	}
	return 0;
}

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

相关文章

leetcode每日一题--矩阵中移动的最大次数

一.题目原型 二.思路解析 1.动态规划 这道题要求的是矩阵的最大移动次数。根据题目意思&#xff0c;从索引 0 列开始向右移动&#xff0c;每次移动一列&#xff0c;最多移动到 n - 1 列&#xff0c;也就是 n - 1次。其移动规则为&#xff1a;当前单元格可以移动到其右上方、正…

[QT] QTextBrowser取消默认右键菜单项 复制链接地址

setTextInteractionFlags(Qt::TextSelectableByMouse);原理 QTextBrowser默认下有三个标志位&#xff0c;QTextBrowser右键菜单相关源码如下 源码链接 if ((d->interactionFlags & Qt::LinksAccessibleByKeyboard)|| (d->interactionFlags & Qt::LinksAccessible…

力扣爆刷第97天之hot100五连刷71-75

力扣爆刷第97天之hot100五连刷71-75 文章目录 力扣爆刷第97天之hot100五连刷71-75一、394. 字符串解码二、739. 每日温度三、84. 柱状图中最大的矩形四、215. 数组中的第K个最大元素五、347. 前 K 个高频元素 一、394. 字符串解码 题目链接&#xff1a;https://leetcode.cn/pr…

影响交易收益的因素有哪些?

在尝试做交易时&#xff0c;你可能会问自己一个问题&#xff1a;交易一天能赚多少钱&#xff1f;“如果我全职投入交易&#xff0c;一天能赚多少&#xff1f;”或者更广泛地说&#xff0c;“交易能为我带来怎样的财富&#xff1f;”这些问题本质上都充满了不确定性&#xff0c;…

[蓝桥杯练习题]确定字符串是否包含唯一字符/确定字符串是否是另一个的排列

确定字符串是否包含唯一字符 #include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);map<char,int>m;string s;cin>>s;for(int i0;i<s.size();i){if(isalpha(s[i]))s[i]tolower(s[i]);if(…

解决离线运行vLLM 启动报dns.google错

现象 vLLM版本0.3.3离线运行时&#xff0c;报类似下面形式的错误&#xff1a; File "/usr/local/lib/python3.10/dist-packages/vllm/entrypoints/llm.py", line 109, in init self.llm_engine LLMEngine.from_engine_args(engine_args) File "/usr/local/li…

人工智能与挖矿 为什么要用显卡而不是CPU

人工智能&#xff08;AI&#xff09;和加密货币挖矿都是对计算资源要求很高的应用。在这两种情况下&#xff0c;使用显卡&#xff08;GPU&#xff09;而不是中央处理器&#xff08;CPU&#xff09;的原因主要是因为显卡在处理特定类型的计算任务时具有显著的优势。 1、并行处理…

el-dialog弹框遮罩层问题

先看一下出现的bug&#xff0c;点击按钮出现弹框的时候&#xff0c;遮罩层出现在弹框上层&#xff0c;不知道是那个同事写的全局样式影响的&#xff0c;这个时候我们需要在el-dialog标签上添加一个属性就行 :modal-append-to-body“false” 下图是出现的问题&#xff0c;遮罩层…