⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3962240_tle.cc

📁 北大大牛代码 1240道题的原代码 超级权威
💻 CC
字号:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>

using namespace std;
char alphaset[] = "1234567890. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int cnt[64];

int sum;

double getH()
{
	int i;
	double ret = 0.0;

	for (i = 0; i < 64; i++)
	{
		if (cnt[i] != 0)
		{
			double p = cnt[i] * 1.0 / sum;
			ret += p * log10(p) / log10(2);
		}
	}
	return -ret;
}

void show()
{
	int i, j;
	for (i = 0; i < 64; i++)
	{
		for (j = 0; j < cnt[i]; j++)
		{
			putchar(alphaset[i]);
		}
	}
	puts("");
}

void f()
{
	int i, p;
	int min = 10000, max = 0;

	if (sum < 500)
	{
		for (i = 0; i < 64; i++)
		{
			if (cnt[i] < min)
			{
				min = cnt[i];
				p = i;
			}
		}
		sum+=3;
		cnt[p]+=3;
	}
	else
	{
		for (i = 0; i < 64; i++)
		{
			if (cnt[i] > max && cnt[i] != 0)
			{
				max = cnt[i];
				p = i;
			}
		}
		sum--;
		cnt[p]--;
	}
}

void g()
{
	
	int i, p;
	int max = 0, min = 10000;

	if (sum < 500)
	{
		for (i = 0; i < 64; i++)
		{
			if (cnt[i] > max)
			{
				max = cnt[i];
				p = i;
			}
		}
		sum+=3;
		cnt[p]+=3;
	}
	else
	{
		for (i = 0; i < 64; i++)
		{
			if (cnt[i] < min && cnt[i] != 0)
			{
				min = cnt[i];
				p = i;
			}
		}
		sum--;
		cnt[p]--;
	}
}

int main()
{
	int i;
	double h, H;

	sum = 0;
	for (i = 0; i < 64; i++)
	{
		cnt[i] = rand() % 10;
		if (cnt[i] < 0)
		{
			cnt[i] *= -1;
		}
		sum += cnt[i];
	}
	scanf("%lf", &H);
	while (true)
	{
		h = getH();
		//printf("%lf\n", h);
		if (fabs(h - H) < 0.005)
		{
			break;
		}
		if (h > H)
			g();
		else
			f();
	}
	show();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -