总括
题数:4。 得分:285/400 时间:4h一、玩具谜题
算法:大模拟(水题)
得分:100
代码:
#include<iostream>
using namespace std;
struct node
{
int head;
string name;
}a[100007];
int main(){
int m,n;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i].head>>a[i].name;
}
int ans=0,x,y;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
if(a[ans].head==0&&x==0)ans=(ans+n-y)%n;
else if(a[ans].head==0&&x==1)ans=(ans+y)%n;
else if(a[ans].head==1&&x==0)ans=(ans+y)%n;
else if(a[ans].head==1&&x==1)ans=(ans+n-y)%n;
}
cout<<a[ans].name<<endl;
return 0;
}
二、神奇的幻方
算法:暴力枚举,模拟(水题)
得分:100
代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
int x;
int y;
}a[1600];
int b[45][45];
int n;
int main(){
cin>>n;
memset(b,0,sizeof(b));
a[1].x=n/2+1;
a[1].y=1;
b[1][n/2+1]=1;
for(int i=2;i<=n*n;i++){
int tx=a[i-1].x,ty=a[i-1].y;
if(ty==1&&tx!=n){
a[i].x=tx+1;
a[i].y=n;
b[a[i].y][a[i].x]=i;
continue;
}
if(ty!=1&&tx==n){
a[i].x=1;
a[i].y=ty-1;
b[a[i].y][a[i].x]=i;
continue;
}
if(ty!=1&&tx!=n){
if(b[ty-1][tx+1]==0){
a[i].x=tx+1;
a[i].y=ty-1;
}
else{
a[i].x=tx;
a[i].y=ty+1;
}
b[a[i].y][a[i].x]=i;
continue;
}
if(ty==1&&tx==n){
a[i].x=tx;
a[i].y=ty+1;
b[a[i].y][a[i].x]=i;
continue;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
return 0;
}
三、蚯蚓
算法:二叉堆,模拟
得分:85(TLE三个点)
代码:
#include<bits/stdc++.h>
using namespace std;
priority_queue<int> w;
long long n,m,q,u,v,t;
long long a[100010];
double p;
int main(){
cin>>n>>m>>q>>u>>v>>t;
p=double(u)/double(v);
for(int i=1;i<=n;i++){
cin>>a[i];
w.push(a[i]);
}
for(int i=1;i<=m;i++){
long long temp=w.top(),x1,x2;
w.pop();
temp+=(i-1)*q;
if(i%t==0) cout<<temp<<" ";
x1=int(floor(p*temp));
x2=temp-x1;
w.push(x1-i*q);
w.push(x2-i*q);
}
cout<<endl;
for(int i=1;!w.empty();i++){
if(i%t==0) cout<<w.top()+m*q<<" ";
w.pop();
}
cout<<endl;
return 0;
}
四、列队
算法:平衡树,线段树,树状数组
得分:竟然爆零了!!!
反思:当时很快写出前三题,最后一题不顾一切想正解,没有暴力骗分,最后“听取WA声一片”。正规比赛不要这么浪!!!