Submission #33954

#TimeUsernameProblemLanguageResultExecution timeMemory
33954mohammad_kilaniSplit the sequence (APIO14_sequence)C++14
0 / 100
2000 ms131072 KiB
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define oo 2000000000
const int N = 100010;
int n , k , arr[N] , sum[N];
int ans;
vector<int> va;
map< vector<int> , bool > vis;
void solve2(vector<int> &v,int j,int cur){
	if(vis[v]) return;
	vis[v] = true;
	if(j == k){
		if(cur > ans){
			ans = cur;
			va = v;
		}
		return;
	}
	int last = 0 ;
	int k = 1;
	for(int i=0;i<v.size();i++){
		while(k <= v[i]){
			if(k == v[i]){
				k++;
				continue;
			}
			int f = sum[k] - sum[last];
			int  s = sum[v[i]] - sum[k];
			int num = f * s;
			vector<int> v2;
			bool in = false;
			for(int l=0;l<v.size();l++){
				if(in == false && k < v[l]){
					in = true;
					v2.push_back(k);
				}
				v2.push_back(v[l]);
			}
			solve2(v2,j+1,cur + num);
			k++;
		}
		last = v[i];
	}

}

long long solve(vector<int> &v,int j){
	if(j == k) return 0;
	long long cur = 0 ;
	int k = 1;
	int idx = 0 ;
	int last = 0 ;
	for(int i=0;i<v.size();i++){
		while(k <= v[i]){
			long long f = sum[k] - sum[last];
			long long s = sum[v[i]] - sum[k];
			long long num = f * s;
			if(num > cur){
				cur = num;
				idx = k;
			}
			k++;
		}
		last = v[i];
	}
	v.push_back(idx);
	sort(v.begin(),v.end());
	return cur + solve(v,j+1);
}

int main() {
	//freopen("in.txt","r",stdin);
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++){
		scanf("%d",&arr[i]);
		sum[i] = sum[i-1] + arr[i];
	}
	vector<int> v;
	v.push_back(n);
	solve2(v,0,0);
	cout << ans << endl;;
	for(int i=0;i<va.size()-1;i++){
		printf("%d ",va[i]);
	}
	cout << endl;
	return 0;
}

Compilation message (stderr)

sequence.cpp: In function 'void solve2(std::vector<int>&, int, int)':
sequence.cpp:22:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<v.size();i++){
               ^
sequence.cpp:33:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int l=0;l<v.size();l++){
                 ^
sequence.cpp: In function 'long long int solve(std::vector<int>&, int)':
sequence.cpp:54:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<v.size();i++){
               ^
sequence.cpp: In function 'int main()':
sequence.cpp:83:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<va.size()-1;i++){
               ^
sequence.cpp:74:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&k);
                     ^
sequence.cpp:76:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&arr[i]);
                      ^
#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...