A. Secret Sport
题意:
一个长为n的字符串,A表示A赢,B表示B赢。当一局比赛中A或B赢下X场,则A或B赢得此局。当A或B赢下Y局,则其胜利。结束比赛
思路:
最后一场比赛的获胜者就是整个比赛的获胜者
代码:
#include <bits/stdc++.h>
using namespace std ;
const int max_N=1e5+7;
const int INF = 0x3f3f3f3f;
typedef long long ll;
void solve(){
int n;
cin>>n;
string s;
cin>>s;
if(s[n-1]=='A'){
cout<<'A'<<endl;
}else{
cout<<'B'<<endl;
}
}
int main(){
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
B. Two Out of Three
题意:
有一个长为n的数组a,构造一个长度为n的数组b,使得刚好满足以下三个条件中的两个:ai=aj, bi=1, bj=2; ai=aj, bi=1, bj=3;ai=aj, bi=2, bj=3.
思路:
a中存在至少两对相同的数,否则输出-1。第一对可构造1、2,剩下的为1;第二对构造2、3,剩下的为3;剩余的都为1.
代码:
#include <bits/stdc++.h>
using namespace std ;
const int max_N=1e5+7;
const int INF = 0x3f3f3f3f;
typedef long long ll;
void solve(){
int n;
cin>>n;
int a[n+1];
int mp[110];
int count=0;
int i1,i2,i3,i4;
memset(mp,0,sizeof(mp));
vector <int > q;
q.clear();
for(int i=1;i<=n;i++){
cin>>a[i];
mp[a[i]]++;
if(mp[a[i]]==2){
count++;
if(count<=2){
q.push_back(a[i]);
}
}
}
if(count<2){
cout<<-1<<endl;
}else{
int count1=2;
int count2=2;
for(int i=1;i<=n;i++){
if(a[i]==q[0]){
if(count1==2){
cout<<1<<" ";
count1--;
}else if(count1==1){
cout<<2<<" ";
count1--;
}else{
cout<<1<<" ";
}
}else if(a[i]==q[1]){
if(count2==2){
cout<<2<<" ";
count2--;
}else if(count2==1){
cout<<3<<" ";
count2--;
}else{
cout<<3<<" ";
}
}else{
cout<<1<<" ";
}
}
cout<<endl;
}
}
int main(){
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}
C. Anonymous Informant
题意:
选取一个数组a,取a中的一个数,使a[x]=x,然后把整个数组左移x个单位,经过k次操作后,数组a等于数组b,则输出Yes,否则输出No。
思路:
当我们选取一个数a[x]并左移后,该数会被移动到数组的最后一位,因此我们可以由数组b倒着推回去,选取最后一个位置。出现重复的位置则说明出现循环可以直接输出Yes,若最后一位大于n则操作中止输出No。
代码:
#include <bits/stdc++.h>
using namespace std ;
const int max_N=1e5+7;
const int INF = 0x3f3f3f3f;
typedef long long ll;
void solve(){
int n;
ll k;
cin>>n>>k;
ll b[n+1];
for(int i=1;i<=n;i++){
cin>>b[i];
}
int mp[n+1];
memset(mp,0,sizeof(mp));
int idx=n;
while(k>0){
if(b[idx]>n){
cout<<"No"<<endl;
return ;
}
mp[idx]++;
if(mp[idx]==2){
break;
}
idx=(idx-b[idx]+n)%n;
if(idx==0){
idx=n;
}
k--;
}
cout<<"Yes"<<endl;
}
int main(){
ios::sync_with_stdio(false);
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}