2021CCPC第十六届华讯杯内蒙古大学生程序设计竞赛题解
Posted Mr_渣渣辉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021CCPC第十六届华讯杯内蒙古大学生程序设计竞赛题解相关的知识,希望对你有一定的参考价值。
A题 BGO
/**A*/
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
double p;
cin>>p;
double w=p,e=p,m=1,cnt=1;
while(m!=0){
cnt++;
m*=(1-w);
w=min(w+p,1.0);
e+=w*m*cnt;
}
printf("%.6lf\\n",(double)1/e);
}
return 0;
}
B题 小Y的游戏
/**B*/
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int a,b,c;
cin>>a>>b>>c;
bool flag=1;
if(a*b*c==163)flag=0;
if(a*b+c==163)flag=0;
if(a*b-c==163)flag=0;
if(a+b*c==163)flag=0;
if(a-b*c==163)flag=0;
if(!flag)
cout<<1<<endl;
else
cout<<0<<endl;
}
return 0;
}
C题 灭霸打响指
/**C*/
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
double sum=0;
for(int i=0;i<n;i++){
double num;
cin>>num;
sum+=num;
}
printf("%.2lf\\n",sum*0.5);
}
return 0;
}
D题 将军旗
/**D*/
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e2*4+5;
void cnt(int n,int m,int amaze[][maxn],int bmaze[][maxn],int *acnt,int *bcnt){
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
*acnt+=amaze[i][j];
*bcnt+=bmaze[i][j];
}
}
int main(){
int t;
cin>>t;
while(t--){
int n,m;
cin>>n>>m;
int ax,ay,bx,by;
int amaze[maxn][maxn],bmaze[maxn][maxn];
memset(amaze,0,sizeof(amaze));
memset(bmaze,0,sizeof(bmaze));
cin>>ax>>ay;
cin>>amaze[ax][ay];
cin>>bx>>by;
cin>>bmaze[bx][by];
int acnt=0,bcnt=0;
int flag=0;
int q;
cin>>q;
for(int i=0;i<q;i++){
int x,y;
int num;
char c;
cin>>x>>y>>c;
amaze[ax][ay]++;
num=amaze[x][y]-1;
amaze[x][y]=1;
if(c=='U')x--;
if(c=='D')x++;
if(c=='L')y--;
if(c=='R')y++;
num+=amaze[x][y];
if(num>bmaze[x][y]){
amaze[x][y]=num-bmaze[x][y];
bmaze[x][y]=0;
}else{
amaze[x][y]=0;
bmaze[x][y]-=num;
}
if(bmaze[bx][by]==0&&!flag){
flag=1;
cnt(n,m,amaze,bmaze,&acnt,&bcnt);
}
cin>>x>>y>>c;
bmaze[bx][by]++;
num=bmaze[x][y]-1;
bmaze[x][y]=1;
if(c=='U')x--;
if(c=='D')x++;
if(c=='L')y--;
if(c=='R')y++;
num+=bmaze[x][y];
if(num>amaze[x][y]){
bmaze[x][y]=num-amaze[x][y];
amaze[x][y]=0;
}else{
bmaze[x][y]=0;
amaze[x][y]-=num;
}
if(amaze[ax][ay]==0&&!flag){
flag=2;
cnt(n,m,amaze,bmaze,&acnt,&bcnt);
}
}
if(flag==0){
cout<<"draw!"<<endl;
cnt(n,m,amaze,bmaze,&acnt,&bcnt);
}else if(flag==1)
cout<<"Alice wins!!!"<<endl;
else
cout<<"Bob wins!!"<<endl;
cout<<acnt<<' '<<bcnt<<endl;
}
return 0;
}
E题 小手冰凉和oja的新游戏
/**E*/
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
string s[107];
int n,k=0;
cin>>n;
for(int i=0;i<n;i++){
int m;
cin>>m;
string t="";
for(int j=0;j<m;j++){
int num;
cin>>num;
t+=(char)(num+'0');
}
bool flag=1;
for(int j=0;j<k;j++){
if(s[j].find(t)!=-1){
flag=0;
break;
}
if(t.find(s[j])!=-1){
flag=0;
s[j]=t;
break;
}
}
if(flag){
s[k++]=t;
}
}
bool flag=1;
for(int i=0;i<k;i++){
if(s[i].length()%2==0){
flag=0;
break;
}
}
if(flag)
cout<<"Xsblwins!"<<endl;
else
cout<<"Ojawins!"<<endl;
}
return 0;
}
F题 小Y的数列
/**F*/
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e3*2+5;;
const int mod=1e4+7;
int str[maxn][maxn];
int main(){
int t;
cin>>t;
while(t--){
int n,m;
memset(str,0,sizeof(str));
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
if(i==0)
str[i][j]=1;
else{
if(j==0)
str[i][j]=1;
else
str[i][j]=(str[i][j-1]+str[i-1][j])%mod;
}
}
cout<<str[n-1][m-1]<<endl;
}
return 0;
}
G题 弹珠卡牌
/**G*/
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int ball[maxn];
int card[maxn];
int main(){
int tt;
cin>>tt;
while(tt--){
memset(card,0,sizeof(card));
memset(ball,0,sizeof(ball));
int n,p,t;
cin>>n>>p>>t;
int bp=t;
for(int i=0;i<n;i++)
cin>>ball[i];
int m;
cin>>m;
for(int i=0;i<m;i++){
int num,sum;
cin>>num>>sum;
card[num]=card[num]==0?sum:min(sum,card[num]);
}
int allneed=0;
for(int i=0;i<=p;i++)
allneed+=card[i];
int cnt=0;
while(allneed){
bool flag=1;
for(int i=0;i<t;i++){
if(card[ball[i]]!=0){
cnt++;
flag=0;
card[ball[i]]--;
allneed--;
if(bp<n){
ball[i]=ball[bp++];
}else
ball[i]=p+1;
}
}
if(flag){
if(bp<n){
cnt++;
ball[0]=ball[bp++];
if(card[0]!=0){
card[0]--;
allneed--;
}
}else{
if(t>0&&card[0]!=0){
card[0]--;
allneed--;
t--;
cnt++;
}else
break;
}
}
}
if(allneed==0)
cout<<cnt<<endl;
else
cout<<-1<<endl;
}
return 0;
}
H题 回文串文回
/**H*/
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
string s;
cin>>s;
int maxlen=0;
for(int i=0;i<s.length();i++){
for(int j=s.length()-1;j>i+1+maxlen;j--){
int p=0;
while(i+p+1<j-p&&s[i+p]==s[j-p])
p++;
maxlen=max(p*2,maxlen);
}
}
cout<<maxlen<<endl;
}
return 0;
}
I题 超级无敌动态树模板
/**I*/
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4以上是关于2021CCPC第十六届华讯杯内蒙古大学生程序设计竞赛题解的主要内容,如果未能解决你的问题,请参考以下文章