제출 #73586

#제출 시각아이디문제언어결과실행 시간메모리
73586haitunFibonacci representations (CEOI18_fib)C++14
5 / 100
4017 ms263168 KiB
#include <bits/stdc++.h>
//#include "functions.h"
#define FOR(x,y) for(int x = 0; x < y; x++)
#define ALLR(x) x.begin(),x.end()
#define con continue
#define ll long long
#define LINF LLONG_MAX
#define INF INT_MAX
#define pii pair<int,int>
#define vi vector <int>
#define pb push_back
#define F first
#define S second
#define len(x) x.length()
#define sz(x) x.size()
#define SEE(v)	for(auto x : v)	cout << x << " "; cout << endl;
using namespace std;
void rec(ll &ans, vector <ll> vans, vector <vector<ll> > &vector_of_ans){
	FOR(j, sz(vans))
	{
		if(vans[j] == 0 || vans[j] == 1)  con;

		ll temp = vans[j];
		vans.erase(vans.begin() + j);

		//int pos1 = lower_bound(ALLR(vans), temp - 1) - vans.begin();
		//int pos2 = lower_bound(ALLR(vans), temp - 2) - vans.begin();

		if(find(ALLR(vans), temp - 1) == vans.end() && find(ALLR(vans), temp - 2) == vans.end())
		{
			vector <ll> vtemp = vans;
			
			int pos2 = lower_bound(ALLR(vtemp), temp - 2) - vtemp.begin();
			vtemp.insert(vtemp.begin() + pos2, temp - 2);
			
			int pos1 = lower_bound(ALLR(vtemp), temp - 1) - vtemp.begin();
			vtemp.insert(vtemp.begin() + pos1, temp - 1);

			bool is_ans = true;
			FOR(k, sz(vector_of_ans))
			{
				if(vector_of_ans[k] == vtemp)	is_ans = false;
			}
			if(is_ans)
			{
				vector_of_ans.pb(vtemp);
				ans++;
			}
			
		//	SEE(vtemp);

			rec(ans, vtemp, vector_of_ans);

			//vtemp.erase(vans.begin() + pos1);
			//vans.erase(vans.begin() + pos2);
		}

		vans.insert(vans.begin() + j, temp);
	}
}
int main() {

	//freopen("test.txt","r",stdin);

	int n;
	cin >> n;
	vector <vector <ll> > vector_of_ans;
	vector <ll> num(n), t;
	FOR(j, n)	cin >> num[j];

	FOR(cuiwbdcw, n)
	{
		int pos = lower_bound(ALLR(t), num[cuiwbdcw] - 1) - t.begin();
		t.insert(t.begin() + pos, num[cuiwbdcw] - 1);
		//SEE(t);
		for(int j = sz(t) - 1; j >= 0; j--)
		{
			
			if(j != 0)
			{
				if(t[j] == t[j - 1] + 1)
				{
					int bigger = t[j] + 1;
					
					t.erase(t.begin() + j - 1);
					t.erase(t.begin() + j - 1);
					
					int pos = lower_bound(ALLR(t), bigger) - t.begin();
					t.insert(t.begin() + pos, bigger);
					
					j += 2;
				}
				else if(t[j] == t[j - 1])
				{
					int same = t[j];

					t.erase(t.begin() + j - 1);
					t.erase(t.begin() + j - 1);
					int pos = lower_bound(ALLR(t), same - 2) - t.begin();
					if(same - 2 >= 0)	t.insert(t.begin() + pos, same - 2);
					pos = lower_bound(ALLR(t), same + 1) - t.begin();
					t.insert(t.begin() + pos, same + 1);

					j += 2;
				}
			}
			
			if(j > sz(t))	j = sz(t);
		}
		
		//SEE(t);
		
		ll ans = 1;
		vector <ll> vans = t;
		rec(ans, vans, vector_of_ans);
		cout << ans << endl;
	}
}

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

fib.cpp: In function 'void rec(long long int&, std::vector<long long int>, std::vector<std::vector<long long int> >&)':
fib.cpp:3:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define FOR(x,y) for(int x = 0; x < y; x++)
                                   ^
fib.cpp:19:2: note: in expansion of macro 'FOR'
  FOR(j, sz(vans))
  ^~~
fib.cpp:3:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define FOR(x,y) for(int x = 0; x < y; x++)
                                   ^
fib.cpp:40:4: note: in expansion of macro 'FOR'
    FOR(k, sz(vector_of_ans))
    ^~~
fib.cpp: In function 'int main()':
fib.cpp:108:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if(j > sz(t)) j = sz(t);
         ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...