萌新的拍子

萌新的拍子

萌新的拍子,在这里贴一下,大佬勿喷♪(・ω・)ノ

主体#

非常典的东西,加了记录两份代码运行时间的功能

#include<bits/stdc++.h>
using namespace std;
int minetime,stdtime;
int minesum,stdsum;
int main(){
	while(1){
		puts("data be");
		system("data.exe>data.txt");
		puts("data ok");

		puts("mine begin");
		minetime=-clock();
		system("mine.exe<data.txt>mine.txt");
		minetime+=clock();
		puts("mine ok");

		puts("std begin");
		stdtime=-clock();
		system("std.exe<data.txt>std.txt");
		stdtime+=clock();
		puts("std ok");
		if(minetime>1000)return 0;
		if(system("fc mine.txt std.txt"))return 0;
		cout<<minetime<<' '<<stdtime<<endl;
		minesum+=minetime;
		stdsum+=stdtime;
		cout<<minesum<<' '<<stdsum<<'\n';
	}
	return 0;
}

随机生成二叉树#

每次把当前点随机向前面的一个点连边,用堆维护,可能不大随机(

#include<bits/stdc++.h>
using namespace std;
const int maxn=10;
int n,m;
struct node{
	int u;
	unsigned long long v;
	bool operator < (const node &cmp)const{
		return v<cmp.v;
	}
};
int ch[maxn],fa[maxn];
priority_queue<node>q;
int main(){
	freopen("in.txt","r",stdin);
	mt19937 rnd(time(0)*getchar()*getchar()*getchar());

	n=rnd()%maxn+1;
	cout<<n<<'\n';
	fa[1]=0;
	q.push((node){1,rnd()});
	for(int i=2;i<=n;i++){
		node now=q.top();q.pop();
		fa[i]=now.u;
		++ch[now.u];
		if(ch[now.u]<2)q.push((node){now.u,rnd()});
	}
	for(int i=1;i<=n;i++)cout<<i<<' '<<fa[i]<<'\n';
	return 0;
}

生成一棵树#

需要手写一个并查集,可能不大随机(
而且是随机碰撞的,效率不是很高(

for(int i=1;i<n;){
	int u=(rnd()%n)+1;
	int v=(rnd()%n)+1;
	if(find(u)==find(v))continue;
	fa[find(u)]=find(v);
	cout<<u<<' '<<v<<endl;
	++i;
}

所以就改进一下,这个是线性的:

for(int i=1;i<=n;i++)a[i]=i;
shuffle(a+1,a+1+n,rnd);
for(int i=2;i<=n;i++)cout<<a[i]<<' '<<a[rnd()%(i-1)+1]<<'\n';
posted @   洛谷Augury  阅读(21)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示