Codeforces Global Round 15 ABD
Posted 尘封陌路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Global Round 15 ABD相关的知识,希望对你有一定的参考价值。
A. Subsequence Permutation
思路:
直接排序再统计相同的个数,答案是长度-相同的个数
#include<bits/stdc++.h>
using namespace std;
string s;
string c;
int ans;
int main()
{
int t;
cin>>t;
int n;
while(t--)
{
cin>>n;
cin>>s;
c=s;
sort(c.begin(),c.end());
int ans=0;
for(int i=0;i<s.size();i++)
{
if(c[i]==s[i]) ans++;
}
// printf("ans==%d \\n",ans);
cout<<n-ans<<endl;
}
return 0;
}
B. Running for Gold
思路:
1.假设第一个人是冠军,然后往下遍历和他比较,如果A比他强那么把A认为是暂时的冠军(因为冠军不能输,如果第一个人被比下去了,第一个人肯定不是冠军,所以前面的败者一定不可能是冠军)。
2.再遍历一遍,冠军要比所有人都强,如果没有比所有人都强,那么就没有冠军。
Code
#include<bits/stdc++.h>
using namespace std;
const int N=50000+10;
int a[N][10];
int t,n;
int main()
{
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=5;j++)
{
cin>>a[i][j];
}
}
int id=1;
for(int i=2;i<=n;i++)
{
int cnt=0;
for(int j=1;j<=5;j++)
{
cnt+=(a[i][j]<a[id][j]);
}
if(cnt>=3) id=i;
}
int flag=1;
for(int i=1;i<=n;i++)
{
int cnt=0;
for(int j=1;j<=5;j++)
{
cnt+=(a[i][j]<a[id][j]);
}
if(cnt>=3)
{
flag=-1;
break;
}
}
if(flag==1)
{
cout<<id<<endl;
}
else
{
cout<<"-1"<<endl;
}
}
return 0;
}
D. Array Differentiation
思路:
只要找到一个环形成回路即可,用暴力搜索。
Code
#include<bits/stdc++.h>
using namespace std;
const int N=20;
int a[N];
map<int,int> mp;
int t;
int n;
int flag;
void dfs(int cnt,int sum)
{
if(cnt==n+1)
{
mp[sum]++;
return ;
}
dfs(cnt+1,sum);
dfs(cnt+1,sum+a[cnt]);
}
int main()
{
cin>>t;
while(t--)
{
flag=-1;
mp.clear();
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
dfs(1,0);
for(auto i:mp)
{
if(i.second>=2)
{
flag=1;
break;
}
}
if(flag==1)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
return 0;
}```
以上是关于Codeforces Global Round 15 ABD的主要内容,如果未能解决你的问题,请参考以下文章