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;
}