2021-10-04模拟赛总结

文章目录

  • 总括
  • 一、玩具谜题
  • 二、神奇的幻方
  • 三、蚯蚓
  • 四、列队


总括

题数:4。 得分:285/400 时间:4h

一、玩具谜题

算法:大模拟(水题)

得分:100

代码:

#include
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
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
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声一片”。正规比赛不要这么浪!!!

你可能感兴趣的:(算法,c++,数据结构)