답안 #645714

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
645714 2022-09-27T17:34:13 Z Koful123 Kpart (eJOI21_kpart) C++17
30 / 100
2000 ms 101560 KB
#include <bits/stdc++.h>
using namespace std;
#define double long double
#define endl "\n"
#define pb push_back
#define ff first
#define ss second
#define mod 998244353
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()

void solve(){

	int n;
	cin >> n;

	vector<int> v(n+1,0);
	for(int i=1;i<=n;i++){
		cin >> v[i];
	}

	vector<vector<int>> dp(n+1,vector<int> (1e5 + 5,0));
	for(int i=1;i<=n;i++){
		for(int j=1e5;j>=1;j--){
			dp[i][j] = dp[i-1][j];
			if(j + v[i] <= 1e5){
				dp[i][j+v[i]] = max(dp[i][j+v[i]],dp[i][j]);
			}
		}
		dp[i][v[i]] = max(dp[i-1][v[i]],i);
	}

	vector<int> ans;
	for(int i=1;i<=n;i++){
		int sum = 0,ok = 1;
		for(int j=1;j<i;j++){
			sum += v[j];
		}
		for(int j=i;j<=n;j++){
			sum -= v[j-i],sum += v[j];
			if(sum % 2 || dp[j][sum / 2] <= j-i){
				ok = 0;break;
			}
		}
		if(ok) ans.pb(i);
	}

	cout << ans.size() << ' ';
	for(int x : ans){
		cout << x << ' ';
	}
	cout << endl;
}

signed main(){

	ios::sync_with_stdio(0);
	cin.tie(0);

	int t = 1;
	cin >> t;

	while(t--)
		solve();

	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 200 ms 12820 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 606 ms 27272 KB Output is correct
2 Correct 1161 ms 47092 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2065 ms 101560 KB Time limit exceeded
2 Halted 0 ms 0 KB -