换头法的尝试,为什么失败?
查看原帖
换头法的尝试,为什么失败?
724677
Chenhy2022楼主2022/7/1 15:42

3WA,7TLE的0分答案:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[8],n=0,ii=7,change=1;//a=魔法个数组,n=所有总量,i=魔法种数 
	double zou=0,njc=1;
	for(int i=1;i<=7;i++)
	{
		cin>>a[i];
		n+=a[i]; 
	}
	while(a[1]>=1 and a[2]>=1 and a[3]>=1 and a[4]>=1 and a[5]>=1 and a[6]>=1 and a[7]>=1)
	{
		zou++;
		a[change]--;
		change++;
	}
	for(int i=n;i>n-ii;i--)
	{
		njc*=i;
	}
	cout<<zou/njc;
	return 0;
}

用的是自己的换头法 (假设a是一个俄罗斯方块的图,例题就是一个长7高1的一个长方形,并且头为1。

〿〿〿〿〿〿〿

那么其实在例子里,不管头是哪一个,都无所谓,都可以凑一个长7高1的长方形。

然后,七重奏的个数++,并且消一个头,--

()〿〿〿〿〿〿

头变成了第二个

再次检查,消头,没有可消的了,over

(其实到这里,已经能发现问题了,头只能从1开始,消灭了诸如2345671的排列)

(╯°□°)╯︵ ┻━┻

以及后面除了一个N选7的排列,总觉得怪怪的,但是好像又没问题。

还有要不要把头全部算进去,或者只算一个?

题例求出来是0.0001多

其他的也没试,反正不可能对

求指导

QAQ

2022/7/1 15:42
加载中...