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;
}

浙公网安备 33010602011771号