比赛 Asm_Def战记之透明计算网络 评测结果 WWWWWWWWWW
题目名称 Asm_Def排兵布阵 最终得分 0
用户昵称 Tabing010102 运行时间 0.043 s
代码语言 C++ 内存使用 0.70 MiB
提交时间 2015-11-01 10:06:24
显示代码纯文本
#include<iostream>
#include<fstream>
//#include<ctime>

using namespace std;

void in();
long double random(long);
long double mowei(long);

long k,num[100001];

const long long qm=998244353;

ifstream fin("asm_formation.in");
ofstream fout("asm_formation.out");

int main()
{
//	clock_t start,end;
//	start=clock();
	in();
	long long temp1,result;
	long total;
	long double ran_num,mowei_num;
	for(int i=1;i<=k;i++) total+=num[i];
	ran_num=random(total-k);
	mowei_num=mowei(k);
	temp1=ran_num*mowei_num;
	result=temp1%qm;
	fout<<result;
//	end=clock();
//	cout<<"Done,time spent:"<<(end-start)/CLOCKS_PER_SEC*1000<<"ms"<<endl;
//	cin.get();
	return 0;
}

void in()
{
	fin>>k;
	for(long i=1;i<=k;i++) fin>>num[i];
}

long double random(long j)
{
	long double f[j+1];
	f[1]=1;
	f[2]=2;
	if(j>=3) {for(long i=3;i<=j;i++) f[i]=i*f[i-1]; return f[j];}
	else return f[j];
}

long double mowei(long m)
{
	if(m>=3)
	{
		long double temp1[m],total,temp2;
		temp2=k-(m-1);
		for(long i=1;i<=temp2;i++) temp1[i]=random(i);
		for(long i=1;i<=temp2;i++) total+=temp1[i];
		for(long i=1;i<=m-2;i++) total*=temp2;
		return total;
	}
	else if(m==2)
	{
		long double total;
		for(long i=0;i<=k-1;i++) total+=random(i);
		return total;
	}
	else if(m==1)
	{
		return k;
	}
	else
	{
		return 0;
	}
}