295902026-06-13 17:51:17KristófK-részcpp17Futási hiba 10/100377ms2284 KiB
#include <iostream>
#include <vector>
#include <unordered_set>
#include <array>
#define MAXn 40
using namespace std;


bool isk(int k,int n,vector<int> &a,array<array<unordered_set<int>,MAXn>,MAXn> &avvals,array<int,MAXn> &pref)
    {
    bool res=true;
    for(int i=0;i<n-k;i++)
        {
        swap(avvals[i][i+k],avvals[i+1][i+k]);
        unordered_set<int> nval;//uj ertekek
        int target=pref[i+k+1]-pref[i];
        target/=2;
        nval.insert(a[i]);
        bool found=false;
        for(int x:avvals[i][i+k]){nval.insert(x+a[i]);found|=(x==target);};
        for(int x:nval){avvals[i][i+k].insert(x);found|=(x==target);};
        if((pref[i+k+1]-pref[i])%2)found=false;
        res &= found;
        }
    return res;
    }



void solve()
    {
    int n;cin>>n;
    vector<int> a(n);
    for(int &x:a)cin>>x;
    cerr<<"input";
    array<array<unordered_set<int>,MAXn>,MAXn> avvals;
    array<int,MAXn> pref;
    pref[0]=0;
    cerr<<"init";
    for(int i=1;i<=n;i++)pref[i]=pref[i-1]+a[i-1];
    vector<int> ans;
    for(int i=0;i<n;i++)
        {
        if(isk(i,n,a,avvals,pref))ans.push_back(i);
        }
    cout<<ans.size();
    for(int x:ans)cout<<" "<<x+1;
    cout<<"\n";
    }



int main()
{
    int t;cin>>t;
    while(t--)solve();
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask110/10
1Elfogadva377ms2284 KiB
subtask20/20
1Futási hiba2ms316 KiB
2Futási hiba2ms316 KiB
subtask30/70
1Futási hiba1ms760 KiB
2Futási hiba1ms756 KiB
3Futási hiba1ms564 KiB
4Futási hiba1ms572 KiB
5Futási hiba2ms564 KiB
6Futási hiba3ms584 KiB
7Futási hiba2ms508 KiB