Submission #661056

#TimeUsernameProblemLanguageResultExecution timeMemory
661056Kaztaev_AlisherLongest beautiful sequence (IZhO17_subsequence)C++17
40 / 100
6080 ms47056 KiB
#pragma GCC optomize ("Ofast")
#pragma GCC optomize ("unroll-loops")
#pragma GCC target ("avx,avx2,fma")

#include <bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define sz size
#define cl clear
#define ins insert
#define ers erase
#define pii pair < int , int >
#define pll pair< long long  , long long >
#define all(x) x.begin() , x.end()
#define ios ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define file(s) if (fopen(s".in", "r")) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout)
#define tostr(x) to_string(x)
#define tonum(s) atoi(s.c_str())
#define seon(x) setprecision(x)
#define bpop(x) __builtin_popcount(x)
#define deb(x) cerr << #x  << " = " << x << endl;

typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
const double PI = 3.14159265;

const ll N = 1e5+5;
const ll mod = 1e9+7;
const ll inf = 1e9;
const ll INF = 1e18;

using namespace std;

int a[N] , k[N] , dp[N] , p[N] , b[N];
vector<int> vec[(1<<20)];
void solve(){
	int n , mx = 0;
	cin >> n;
	for(int i = 1; i <= n; i++) {
		cin >> a[i] , p[i] = i;
		for(int j = 0 ; j < 20; j++){
			if((a[i] >> j) & 1){
				mx = max(mx , j);
			}
		}
	}
	for(int i = 1; i <= n; i++) cin >> k[i];
	if(mx < 8){
		for(int i = 1; i <= n; i++){
			int cnt = 0;
			for(int j = 0; j < 8; j++){
				if((a[i] >> j) & 1) b[cnt++] = j;
			}
			for(int mask = 0; mask < (1 << cnt); mask++){
				int sum = 0 , cnt1 = 0;
				for(int j = 0; j < cnt; j++){
					if((mask >> j) & 1){
						sum += (1 << b[j]);
						cnt1++;
					}
				}
				if(cnt1 == k[i]){
					for(int x : vec[sum]){
						if(bpop((a[x] & a[i])) == k[i]) {
							if(dp[x]+1 > dp[i]){
								dp[i] = dp[x]+1;
								p[i] = x;
							}
						}
					}
				}  
				vec[sum].pb(i);
			}
		}
	} else {
		for(int i = 1; i <= n; i++) cin >> a[i] , p[i] = i;
		for(int i = 1; i <= n; i++) cin >> k[i];
		for(int i = 1; i <= n; i++){
			for(int j = 1; j < i; j++){
				if(bpop((a[i] & a[j])) == k[i]){
					if(dp[i] < dp[j]+1){
						p[i] = j;
						dp[i] = dp[j] + 1;
					}
				}
			}
		}
	}
	int ans = 0 , x = 1;
	for(int i = 1; i <= n; i++){
		if(dp[i] > ans){
			x = i;
			ans = dp[i];
		}
	}
	vector<int> v;
	while(p[x] != x){
		v.pb(x);
		x = p[x];
	}
	v.pb(x);
	reverse(all(v));
	cout << v.sz() <<"\n";
	for(int x : v) cout << x <<" ";
}
signed main(){
	file("subsequence");
	ios;
	solve();
	return 0;
}
/*
*/
 

Compilation message (stderr)

subsequence.cpp:1: warning: ignoring '#pragma GCC optomize' [-Wunknown-pragmas]
    1 | #pragma GCC optomize ("Ofast")
      | 
subsequence.cpp:2: warning: ignoring '#pragma GCC optomize' [-Wunknown-pragmas]
    2 | #pragma GCC optomize ("unroll-loops")
      | 
subsequence.cpp: In function 'int main()':
subsequence.cpp:17:48: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 | #define file(s) if (fopen(s".in", "r")) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout)
      |                                         ~~~~~~~^~~~~~~~~~~~~~~~~~~~
subsequence.cpp:110:2: note: in expansion of macro 'file'
  110 |  file("subsequence");
      |  ^~~~
subsequence.cpp:17:77: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 | #define file(s) if (fopen(s".in", "r")) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout)
      |                                                                      ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
subsequence.cpp:110:2: note: in expansion of macro 'file'
  110 |  file("subsequence");
      |  ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...