AtCoder ABC373

A - September

题目描述

在这里插入图片描述

简单暴力即可

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
void solve(){
	 int cnt=0;
	for(int i=1;i<=12;i++){
		string s;
		cin>>s;
		if(s.size()==i){
			cnt++;
		}
	} 
	cout<<cnt<<endl;
}
signed main(){
	ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int _=1;
	//cin>>_;
	while(_--){
		solve();
	}
	return 0;
}

B - 1D Keyboard

题目描述

在这里插入图片描述

暴力
用数组存A-Z中每个字母出现的位置,然后遍历从A移到Z的过程需要移动的最小次数即可。

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int v[30];//存储每个字母出现的位置
void solve(){
	string s;
	cin>>s;
	for(int i=0;i<s.size();i++){
		v[s[i]-'A']=i;
	}
	int cnt=0;
	for(int i=1;i<26;i++){
		cnt+=abs(v[i]-v[i-1]);
	}
	cout<<cnt<<endl;
}
signed main(){
	ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int _=1;
	//cin>>_;
	while(_--){
		solve();
	}
	return 0;
}

C - Max Ai+Bj

题目描述

在这里插入图片描述
很水的C
要使 A i {A}_{i} Ai+ B j {B}_{j} Bj最大,只需分别找出 A i {A}_{i} Ai的最大值和 B j {B}_{j} Bj的最大值即可。
注意max比较时的初始值

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int n,m,t;
int a[N],b[N];
int maxa=-1e9-5,maxb=-1e9-5;
void solve(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		maxa=max(maxa,a[i]);
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
		maxb=max(maxb,b[i]);
	}
	cout<<maxa+maxb<<endl;
}
signed main(){
	ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int _=1;
	//cin>>_;
	while(_--){
		solve();
	}
	return 0;
}

D - Hidden Weights

题目描述

在这里插入图片描述

思路

考虑到本题为有向图,所以可以建双向边(反边边权为负)。用数组vis来判断该点是否已经遍历过了,若还未遍历过该点,则dfs跑与该点连边的点,并将与其连边的点的权值加上边权赋值给该点,最后输出即可。考虑到输出任意一种情况即可,所以将第一个点的权值赋值成0即可。

Code

#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
using namespace std;
const int N=1e6+10;
//=======================
int n,m;
vector<pair<int,int>> G[N];
int vis[N],ans[N];
//=======================
void dfs(int x){
	vis[x]=1;
	for(auto it:G[x]){
		if(!vis[it.fi]){
			ans[it.fi]=ans[x]+it.se;
			dfs(it.fi);
		}
	}
}
void solve(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		G[u].push_back(make_pair(v,w));
		G[v].push_back(make_pair(u,-w));//建双向边
	}
	for(int i=1;i<=n;i++){
		if(!vis[i]){
			dfs(i);
		}
	}
	for(int i=1;i<=n;i++){
		cout<<ans[i]<<" ";
	}cout<<endl;
}
signed main(){
	ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int _=1;
	//cin>>_;
	while(_--){
		solve();
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值