# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
642393 | 2022-09-19T10:48:49 Z | manizare | Kpart (eJOI21_kpart) | C++14 | 1954 ms | 198200 KB |
#include<bits/stdc++.h> #define all(a) a.begin(),a.end() #define pb push_back #pragma GCC target ("avx") #pragma GCC optimaze ("unroll-loops") using namespace std ; const int maxn = 1e5 + 10 , maxq = 1e3+10 , mod = 998244353 ,inf = 1e9 ; int a[maxn] ; short dp[maxq][maxn] ; int pre[maxn] ; signed main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); int t ; cin >> t ; while(t--){ int n ; cin >> n ; for(int i =1 ; i<= n ; i++){ cin >> a[i] ; pre[i] = pre[i-1] + a[i] ; } memset(dp , 0 , sizeof dp); dp[0][0] = 0 ; for(int i = 1; i <= n ; i++){ for(int j = 0 ; j <= pre[i] ; j++){ dp[i][j] = dp[i-1][j] ; if(a[i] <= j){ dp[i][j] = max(dp[i-1][j-a[i]] , dp[i][j]); } if(j == a[i] && j != 0)dp[i][j] = i ; else if(dp[i][j] == 0 && j == 0)dp[i][j] =0 ; } } vector <int> v; for(int i =1 ;i <= n ; i++){ int x = 1 , ok = 0; for(int j = i ; j <= n ; j++){ int sum = pre[j] - pre[x-1] ; if(sum % 2 == 1 || dp[j][sum/2] < x || dp[j][sum/2] == -1){ ok = 1; break; } x++; } if(ok == 0)v.pb(i); } cout << v.size() << " " ; for(short i = 0 ; i <v.size();i++)cout << v[i] << " " ; cout << "\n"; } return 0 ; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 399 ms | 197976 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 498 ms | 197860 KB | Output is correct |
2 | Correct | 468 ms | 198080 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 494 ms | 197980 KB | Output is correct |
2 | Correct | 695 ms | 197996 KB | Output is correct |
3 | Correct | 701 ms | 198000 KB | Output is correct |
4 | Correct | 910 ms | 198200 KB | Output is correct |
5 | Correct | 1511 ms | 198020 KB | Output is correct |
6 | Correct | 1954 ms | 198012 KB | Output is correct |
7 | Correct | 1790 ms | 198192 KB | Output is correct |