破防了
查看原帖
破防了
42979
Will_not_algorithm楼主2023/5/22 09:15
#include<bits/stdc++.h>
#define pb push_back
#define ft first
#define sd second
#define ll long long
#define PLL pair <ll, ll>
using namespace std;
const ll N = 2e5 + 10, M = 1e6 + 10, MOD = 1e9 + 7, INF = 1e9;

ll fact[N];
map<ll, ll> mp;

void init(){
	ll cnt = 2;
	mp[1] = mp[2] = 1, fact[1] = 1, fact[2] = 1;
	for(int i = 3; fact[i - 1] <= INF; i++){
		fact[i] = fact[i - 1] + fact[i - 2];
		cnt += fact[i];
		mp[cnt] = i;
	}
}

void slove(){
	ll n, ans = 0, last = 0, sum = 0;
	cin >> n;
	priority_queue<ll, vector<ll>, less<ll>>q;
	vector<ll> a(n + 1, 0);
	for(int i = 1; i <= n; i++){
		cin >> a[i];
		sum += a[i];
		q.push(a[i]);
	}
	if(!mp[sum]){
		cout << "No" << '\n';
		return ;
	}
	for(int i = mp[sum]; i; i--){
		ll u = q.top();
		q.pop();
		q.push(last);
		if(u < fact[i]){
			cout << "No" << '\n';
			return ;
		}
		u -= fact[i];
		last = u;
	}
	cout << "Yes" << '\n';
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	int t = 1;
	init();
	cin >> t;
	while(t--){
		slove();
	}
	return 0;
} 
2023/5/22 09:15
加载中...