Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

。。

Posted by Cxibo at 2018-07-01 10:03:21 on Problem 1775
#include<iostream>
#include<cstring>
using namespace std;

int fac[10];
int target[1040];
bool b[1000001];



int main()
{
	fac[0] = 1;
	for(int i = 1; i < 10; i++)
		fac[i] = fac[i-1] * i;
//用for清零好像慢了100ms,参考下
	memset(b, 0, sizeof(b));
	
	for(int i = 1; i < 1024; i++)
	{
		target[i] = 0;
//10个数的组合可能性有2<<10种
//用数字i的二进制的每一位表示的组合的取舍,用(i & (1 << j))测验,就能整理全部可能性

		for(int j = 0; j < 10; j++)
			if(i & (1<<j))
				target[i] += fac[j];
		b[target[i]] = true;
	}
	
	
//	for(int i = 0; i < 10; i++)
//	cout << target[i] << endl;
	
	int n; 
	while(cin >> n && n >= 0){		
	if(b[n] == true)
		cout << "YES" << endl;
	else
		cout << "NO" << endl;	
	}
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator