Acwing 第117场周赛
这次的题比较简单,但是在做第二题的时候有地方一开始没有想到,导致想的比较简单,提交错了两次,下次要彻底思考清楚再提交
A题
题意:
给定一个正整数 n,请你计算一共有多少个正整数数对 (a,b)同时满足:
a>b
a+b=n
输入格式
第一行包含整数 T,表示共有 T组测试数据。
每组数据占一行,包含一个正整数 n。
输出格式
每组数据输出一行结果,一个整数,表示满足条件的数对数量。
数据范围前 3个测试点满足 1≤T≤10。
所有测试点满足 1≤T≤104,1≤n≤2×109。
思路:
根据题意不难看出,我们要求的正整数数对的个数其实就是(n-1)/2个
代码:
#include<bits/stdc++.h>
using namespace std;
// const int N=1e5+10;
void solve(){
int n;
cin>>n;
cout<<(n-1)/2<<endl;
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
B题
题意:
某款冒险游戏需要玩家通过 n个关卡获得最终胜利。
第一关为准备关卡,不会经历任何事件。
后续 n−1关,每一关都需要玩家依次经历以下两种事件:首先,玩家会获得一个免伤道具。游戏中一共包含 26种不同类型的免伤道具,用小写字母 a∼z来表示。然后,玩家会受到一次伤害。游戏中一共包含 26种不同类型的伤害,用大写字母 A∼Z来表示。免伤道具与伤害一一对应,道具 a对应伤害 A,道具 b对应伤害 B,以此类推。
当玩家受到某种伤害时,如果自身持有至少一个该伤害的对应免伤道具,则消耗一个对应免伤道具,并免除此次伤害,否则将受到一次伤害。
注意,当前关卡获得的道具即使当前关卡用不到,也可以留着以后关卡使用。
请你计算,整个游戏过程中玩家一共会受到多少次伤害。
思路:
这其实就是一个模拟题,我们只需要统计每关26种免疫道具的数量即可,注意有可能某一种道具不止有一个,可能有多个,因为可以留在后面的关卡,这里也是我一开始错误的点,我只记录了一个。
代码:
#include<bits/stdc++.h>
using namespace std;
int a[30];
void solve(){
int n;
cin>>n;
memset(a,0,sizeof a);
int ans=0;
for(int i=1;i<=2*n-2;i++){
char a1;
cin>>a1;
if(a1>='a'&&a1<='z'){
int b=a1-'a';
a[b]++;
}
else{
int b=a1-'A';
if(!a[b]){
ans++;
}
else{
a[b]-=1;
}
}
}
cout<<ans<<endl;
}
int main(){
int t;
// cin>>t;
t=1;
while(t--){
solve();
}
return 0;
}
C题
题意:
贝茜(Bessie)作为约翰农场资历最老的牛,它拥有一个大家族,具体来说它一共有 n
个后代。
它的家族关系可以看作一个树形结构,它作为奶牛老祖视为树的根节点,即它没有父节点。现在,给定家谱树中其它牛的父节点信息,请你计算树中深度最大的节点的深度。
根节点的深度为 1。
注意:
树中每个节点都由节点对应的奶牛的名字表示。
每头奶牛都有一个独一无二的名字,名字中只包含大小写字母和数字。
名字中的字母不区分大小写,也就是说如果输入中出现了两个仅字母大小写不同的名字,那么它们对应的是同一头牛(同一节点)。
贝茜的名字就是 Bessie,当然在输入中名字中的字母不区分大小写。
输入保证,对于任何一对奶牛父子 ai,bi,在你得知奶牛 ai的父亲是奶牛 bi之前,你一定已经获知了奶牛 bi的父亲信息。
贝茜的父亲信息是无,因为它是根节点,这一点是你一开始就获知的。
输入格式
第一行包含整数 n,表示贝茜的后代数量。
接下来 n行,每行包含两个由大小写字母和数字构成的字符串 ai,bi,表示奶牛 ai的父亲是奶牛 bi。
提示:注意题目中提到过的输入顺序的特殊性。
输出格式
一个整数,表示树中深度最大的节点的深度。
数据范围
前 3个测试点满足 1≤n≤10。
所有测试点满足 1≤n≤200,每个姓名字符串的长度取值范围为 [2,24]。
思路:
其实就是一个哈希表的简单应用,注意题中说名字不区分大小写,那么我们为了统一可以将所有名字转为大写或者小写。
代码:
#include<bits/stdc++.h>
using namespace std;
int a[30];
unordered_map<string, int> mp; // 将每头牛的名字映射到相对应的深度
string xiao(string s){
for(int i=0;i<s.size();i++){
s[i]=tolower(s[i]);
}
return s;
}
void solve(){
mp["bessie"]=1;
//确定根节点
int n;
cin>>n;
int cnt=0;
while(n--){
string a,b;
cin>>a>>b;
a=xiao(a);
b=xiao(b);
mp[a]=mp[b]+1;
cnt=max(cnt,mp[a]);
}
cout<<cnt<<endl;
}
int main(){
int t;
// cin>>t;
t=1;
while(t--){
solve();
}
return 0;
}
标签:周赛,int,道具,名字,伤害,117,奶牛,节点,Acwing
From: https://www.cnblogs.com/du463/p/17643812.html