Acwing第 85 场周赛 ABC
https://www.acwing.com/activity/content/2755/
4791. 死或生
题目大意:
给定n组(10个人)对2个犯人(编号1,2)的生死评价,总数:生>=死,活下来,否则嘎了
输入样例1:
2
1 5 5
2 6 4
输出样例1:
LIVE
LIVE
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=10200,M=2002;
//unordered_map<LL,LL> a[N];
//priority_queue<LL> pq;
//priority_queue<LL,vector<LL>,greater<LL>> pq2;
int main()
{
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
LL T=1;
cin>>T;
map<LL,LL> huo,si;
while(T--)
{
LL op,x,y;
cin>>op>>x>>y;
huo[op]+=x;
si[op]+=y;
}
if(huo[1]>=si[1]) cout<<"LIVE"<<endl;
else cout<<"DEAD"<<endl;
if(huo[2]>=si[2]) cout<<"LIVE"<<endl;
else cout<<"DEAD"<<endl;
return 0;
}
4792. 最大价值
题目大意:
a∼z的价值分别为wa,wb,…,wz。字符串S=s1s2…sl,其价值为 ws1×1+ws2×2+…+wsl×l。
在这个字符串s中随意插入k个小写字母,要求最终得到的字符串的价值尽可能大。
输入样例:
abc
3
1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
输出样例:
41
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=10200,M=2002;
//unordered_map<LL,LL> a[N];
//priority_queue<LL> pq;
//priority_queue<LL,vector<LL>,greater<LL>> pq2;
LL a[N];
int main()
{
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
LL T=1;
//cin>>T;
while(T--)
{
string s;
cin>>s;
LL k;
cin>>k;
LL maxn=-MAXN;
LL sum=0;
map<char,LL> mp;
for(int i=1;i<=26;i++)
{
cin>>a[i];
maxn=max(maxn,a[i]);
mp[char(i+96)]=a[i];
}
for(int i=0;i<s.size();i++)
sum+=mp[s[i]]*(i+1);
//cout<<sum<<endl;
LL len=s.size()+1;
//cout<<maxn<<" "<<len<<endl;
for(int i=len;i<=len+k-1;i++)
{
sum+=maxn*i;
}
cout<<sum<<endl;
}
return 0;
}
4793. 危险程度
题目大意:
n 种化学物质(编号 1∼n),有m对物质之间会发生反应。 倒入顺序随意,求试管的最大危险值。
已知,空试管的危险值为 1,每倒入一种化学物质,如果该物质能够与之前倒入试管中的一种或多种物质发生反应,则试管的危险值将乘以 2。
输入样例3:
3 2
1 2
2 3
输出样例3:
4
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=1000,M=2002;
//unordered_map<LL,LL> a[N];
//priority_queue<LL> pq;
//priority_queue<LL,vector<LL>,greater<LL>> pq2;
LL n,m;
LL father[N];
LL find(LL x)
{
if(father[x]!=x) father[x]=find(father[x]);
return father[x];
}
void merge(LL x,LL y)
{
LL fx=find(x),fy=find(y);
if(fx!=fy) father[fx]=fy;
}
void init()
{
for(int i=0;i<=n;i++)
{
father[i]=i;
}
}
int main()
{
//cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
LL T=1;
//cin>>T;
while(T--)
{
cin>>n>>m;
init();
for(int i=1;i<=m;i++)
{
LL x,y;
cin>>x>>y;
merge(x,y);
}
LL sum=1;
for(int i=1;i<=n;i++)
{
LL fi=find(i);
if(fi==i) ;
else sum*=2;
}
cout<<sum<<endl;
}
return 0;
}
并查集写法,不懂我的dfs写法怎么跑的一塌糊涂