codeforces1202D Print a 1337-string...

Topic links: http://codeforces.com/contest/1202/problem/D

That Italy: T group, each give you a number n, output of your build a required string (len <= 1e5, only composed 1,3,7), such that the string there are n "1337" substring.

Ideas:

Combined in 133 (B number 7) ((A - 2) a 3) in the form of 7

n substring is the B + ((A - 2) * ((A - 1) - 2) / 2), -2 3 because two front wow

AC Code:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>

using namespace std;

int t,n,A,B;

void solve(){//i * j / 2 <= n
	int p = sqrt(n * 2);
	for(int i = p;i <= n * 2; i++){
		if(i * (i - 1) <= n * 2 && (i + 1) * i > n * 2){
			A = i;
			B = n - A * (A - 1) / 2;
			break;
		}
	}
	//A 个 3  (A * (A - 1) / 2)种排列
	printf("133");
	for(int i = 1;i <= B; i++) printf("7");
	for(int i = 1;i <= A - 2; i++) printf("3");
	printf("7\n");
}

int main()
{
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		solve();
	}
}

 

Published 31 original articles · won praise 5 · Views 1380

Guess you like

Origin blog.csdn.net/qq_43685900/article/details/99290305