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...