只要有n个数,它能一直除2且没有再出现过(找到后被标记)则满足整个序列要求。
一种搜索的做法
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; while(t--) { int n; cin>>n; int flag = 1; vector<long long int> a(n); for(int i=0; i<n; i++) cin>>a[i]; sort(a.begin(), a.end()); bool f[n+1]; for(int i=0; i<n+1; i++) f[i] = false; for(int i=0; i<n; i++) { while(a[i]>1 && (a[i]>n || f[a[i]])) a[i] = a[i]/2; if(a[i]>n || f[a[i]]) { cout<<"NO\n"; flag = 0; break; } f[a[i]] = true; } if(flag == 1) cout<<"YES\n"; } return 0; }
cf题 C - Division by Two and Permutation 思维题
最新推荐文章于 2024-09-14 17:18:21 发布