제출 #22661

#제출 시각아이디문제언어결과실행 시간메모리
22661의식의흐름코딩 (#40)Fully Generate (KRIII5_FG)C++14
2 / 7
500 ms395320 KiB
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <deque>
#include <utility>
#include <functional>
#include <list>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <map>
#define MOD 1000000007
using namespace std;

long long dnq(long long a, int n)
{
	if (n <= 0)
		cout << "??" << endl;
	if (n == 1)
		return a%MOD;
	if (n % 2 == 0)
	{
		long long k = dnq(a, n / 2);
		return (k*k)%MOD;
	}
	else
		return (a*dnq(a, n - 1))%MOD;
}

int main() {
	//freopen("input.txt", "r", stdin);
	long long n;
	scanf("%lld", &n);
	vector<pair<int, int> > v;
	v.push_back(make_pair(1, 1));
	v.push_back(make_pair(2, 2));
	long long gg;
	long long ans = 4;
	if (n == 1)
		ans = 1;
	else if (n == 2)
		ans = 2;
	else if (n == 3)
		ans = 4;
	else {
		for (long long g = 3, k = 3, t = 1, j = 1; k < n; g++)
		{
			
			if (k + v[t].first > n)
				v.push_back(make_pair(g, n-k));
			else
				v.push_back(make_pair(g, v[t].first));
			k += v[t].first;
			j++;
			if (j >= v[t].second)
			{
				t++;
				j = 0;
			}
		}
		ans = 1;
		for (int i = 0; i < v.size(); ++i)
		{
			long long tmp = v[i].first%MOD;
			for (int j = i + 1; j < v.size(); ++j, ++i)
				if (v[j].second == v[i].second)
					tmp = (tmp*(v[j].first%MOD) % MOD);
				else
					break;

			ans = (ans * dnq(tmp, v[i].second)) % MOD;
		}
	}
	printf("%lld\n", ans);
}


컴파일 시 표준 에러 (stderr) 메시지

FG.cpp: In function 'int main()':
FG.cpp:67:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < v.size(); ++i)
                     ^
FG.cpp:70:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int j = i + 1; j < v.size(); ++j, ++i)
                          ^
FG.cpp:42:12: warning: unused variable 'gg' [-Wunused-variable]
  long long gg;
            ^
FG.cpp:38:19: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld", &n);
                   ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...