Submission #1202394


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int q[21000],tail;
ll com(ll n,ll m){
	if(n<m) return 0;
	ll ret = 1;
	for(int i=0,j=1;i<m;i++){
		ret*=n-i;
		while(j<=m && ret%j==0){
			ret/=j;
			j++;
		}
	}
	return ret;
}
ll f[30];
int g[30];
int a[100];
int main(){
	ll n;
	cin>>n;
	int now  = 0;
	while(n){
		for(int i = 63;i>1;i--) if((1ll<<i-1)-1<=n){
			n -= (1ll<<i-1)-1;
			//now++;
			//cout<<i<<endl;
			int num = 0;
			memset(a,0,sizeof(a));
			bool flag = true;
			while(n>0 && flag){
				flag =false;
				ll mx =0;
				int p= 0;
				for(int j = 0;j*2<=i;j++){
					ll tmp = 0;
					for(int k = 0;k<=j;k++) tmp+=com(j,k)*com(i-j,k);
					if(tmp>mx && tmp<=n) {
						mx = tmp;
						p = j;
					}
				}
				if(p>0){
					flag = true;
					a[++num] = p;
					n-= mx;
				}
			}
			if(num){
				sort(a+1,a+num+1);
				reverse(a+1,a+num+1);
				for(int j =0;j<i-a[1];j++) q[tail++] = now+1;
				for(int k = 1;k<=num;k++){
				 	q[tail++] = now+k+1;
					for(int j = 0;j<a[k]-a[k+1];j++) q[tail++] = now+1;
				}
				for(int k = num;k>0;k--) q[tail++] = now+k+1;
				now+=num+1;
			} else{
				for(int j = 0;j<i;j++) q[tail++] = now+1;
				now++;
			}
			
			break;
		}
	}
	cout<<tail<<endl;
	for(int i =0;i<tail;i++) cout<<q[i]<<' ';
	puts("");
	return 0;
}

Submission Info

Submission Time
Task C - Tautonym Puzzle
User wtw
Language C++14 (GCC 5.4.1)
Score 1000
Code Size 1359 Byte
Status AC
Exec Time 5 ms
Memory 256 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1000 / 1000
Status
AC × 2
AC × 32
Set Name Test Cases
Sample 00_example_01.txt, 00_example_02.txt
All 00_example_01.txt, 00_example_02.txt, 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt
Case Name Status Exec Time Memory
00_example_01.txt AC 1 ms 256 KB
00_example_02.txt AC 1 ms 256 KB
01.txt AC 2 ms 256 KB
02.txt AC 1 ms 256 KB
03.txt AC 1 ms 256 KB
04.txt AC 2 ms 256 KB
05.txt AC 1 ms 256 KB
06.txt AC 1 ms 256 KB
07.txt AC 2 ms 256 KB
08.txt AC 2 ms 256 KB
09.txt AC 1 ms 256 KB
10.txt AC 1 ms 256 KB
11.txt AC 2 ms 256 KB
12.txt AC 1 ms 256 KB
13.txt AC 2 ms 256 KB
14.txt AC 1 ms 256 KB
15.txt AC 1 ms 256 KB
16.txt AC 1 ms 256 KB
17.txt AC 1 ms 256 KB
18.txt AC 1 ms 256 KB
19.txt AC 2 ms 256 KB
20.txt AC 2 ms 256 KB
21.txt AC 2 ms 256 KB
22.txt AC 1 ms 256 KB
23.txt AC 3 ms 256 KB
24.txt AC 1 ms 256 KB
25.txt AC 1 ms 256 KB
26.txt AC 5 ms 256 KB
27.txt AC 5 ms 256 KB
28.txt AC 1 ms 256 KB
29.txt AC 5 ms 256 KB
30.txt AC 5 ms 256 KB