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的主要内容,如果未能解决你的问题,请参考以下文章