Loading

Loading

2021CCPC女生专场 VP记录

过题顺序:K->A->G->D->I

用时:2.5h

全部一遍过。

K 音乐游戏

#include<bits/stdc++.h>
using namespace std;
int n;

int main()
{
	cin>>n;
	int tmp=0,tot=0;
	while(1)
	{
		char c;
		cin>>c;
	//	cout<<c<<' ';
		if(c=='|') tot++;
		if(tot==2*n) break;
		if(c=='-') tmp++;
	}
	cout<<tmp;
	return 0;
}

A 公交线路

#include<bits/stdc++.h>
using namespace std;
int n,x,y;
int k[11],p[11];
int m;
bool flag;
//左0右1
int main()
{
	cin>>n>>x>>y;
	if(y>x) flag=1;
	
	for(int i=1;i<=n;i++) cin>>k[i];
	cin>>m;
	for(int i=1;i<=m;i++) cin>>p[i];
	//往左查
	bool fl=1,fr=1;
	int tmp=1;
	for(int i=x-1;i>=x-m;i--)
	{
		if(k[i]!=p[tmp])
		{
			fl=0;
			break;
		}
		tmp++;
	}
	tmp=1;
	//往右查
	for(int i=x+1;i<=x+m;i++)
	{
		if(k[i]!=p[tmp])
		{
			fr=0;
			break;
		}
		tmp++;
	}
	if(!flag){
		if(fl&&fr)
		{
			cout<<"Unsure";
		}else if(fl)
		{
			cout<<"Right";
		}else{
			cout<<"Wrong";
		}
	}else{
		if(fl&&fr)
		{
			cout<<"Unsure";
		}else if(fr)
		{
			cout<<"Right";
		}else{
			cout<<"Wrong";
		}
	}
	
	return 0;
}

G 三G网络

直接输出1/n的15位小数即可,轻松绷住。

#include<bits/stdc++.h>
using namespace std;
double n;
int main()
{
	cin>>n;
	printf("%.15lf",1/n*1.000000000000000);
	return 0;
}

D 修建道路

依旧结论题,对每两项相邻元素的最大值累加即可。

猜都猜出来了...^~^?

#include<bits/stdc++.h>
using namespace std;
long long n;
long long a[200010];
int main()
{
	cin>>n;
	long long tot=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(i==1) continue;
		tot+=max(a[i],a[i-1]);
	}
	cout<<tot<<endl;
	return 0;
}

I 驾驶卡丁车

数据范围很小,简单模拟即可。

注意四个边界要初始化为 ‘#’ 的状态。

#include<bits/stdc++.h>
using namespace std;
int now[10];
int x[10],y[10];
int n,m;

int tx,ty;
int v;
int main()
{
	//上,右上,右,右下,下,左下,左,左上
	x[0]=-1,y[0]=0;
	x[1]=-1,y[1]=1;
	x[2]=0,y[2]=1;
	x[3]=1,y[3]=1;
	x[4]=1,y[4]=0;
	x[5]=1,y[5]=-1;
	x[6]=0,y[6]=-1;
	x[7]=-1,y[7]=-1;
	int f=0;
	cin>>n>>m;
	char s[n+2][m+2];
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>s[i][j];
			if(s[i][j]=='*') tx=i,ty=j;
		}
	}
	for(int i=0;i<=n;i++) s[i][0]='#',s[i][m+1]='#';
	for(int i=0;i<=m;i++) s[0][i]='#',s[n+1][i]='#';
	
	int m;
	cin>>m;
	string op;
	cin>>op;
	int v=0;
	for(int i=0;i<m;i++)
	{
		if(op[i]=='U'){
			v++;
		}else if(op[i]=='D'){
			v=max(0,v-1);
		}else if(op[i]=='R'){
			f++;
			f%=8;
		}else{
			f=f-1;
			if(f<0) f+=8;
		}
		bool flag=0;
		for(int j=1;j<=v;j++){
			if(s[tx+x[f]][ty+y[f]]=='#')
			{
				v=0;
				flag=1;
				break;
			}
			if(f%2==1&&s[tx+x[f]][ty]=='#'&&s[tx][ty+y[f]]=='#'){
				v=0;
				flag=1;
				break;
			}
			tx+=x[f],ty+=y[f];
		}
		if(flag){
			printf("Crash! %d %d\n",tx,ty);
		}else{
			printf("%d %d\n",tx,ty);
		}
	}
	return 0;
}
posted @ 2026-09-30 11:24  Miya555  阅读(13)  评论(0)    收藏  举报