Cod sursa(job #2365075)

Utilizator patcasrarespatcas rares danut patcasrares Data 4 martie 2019 11:58:36
Problema Congr Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<fstream>
#include<cmath>
#include<cctype>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<iomanip>
#include<unordered_map>
#define x first
#define y second
#define pb push_back
using namespace std;
//ifstream fin("congr.in");
ofstream fout("congr.out");
FILE *fin=fopen("congr.in","r");
const int maxb=300192;
int ptr=maxb;
char buf[maxb+5];
inline int getint()
{
    int nr=0;
    while(!isdigit(buf[ptr]))
        if(++ptr>=maxb)
            fread(buf,maxb,1,fin),ptr=0;
    while(isdigit(buf[ptr]))
    {
        nr=nr*10+buf[ptr]-'0';
        if(++ptr>=maxb)
            fread(buf,maxb,1,fin),ptr=0;
    }
    return nr;
}
const int DN=6e5+5;
int n,m,a[DN],sum,p[DN],lst[DN];
string s;
void add(int f)
{
	if(f==0)
		return;
	add(f/10);
	f%=10;
	s+=char('0'+f);
}
int main()
{
    n=getint();
    m=n;
    n=2*n-1;
    for(int i=1;i<=n;i++)
    {
    	a[i]=getint();
    	a[i]%=m;
    	p[i]=i;
    }
    while(1)
    {
    	random_shuffle(p+1,p+n+1);
    	sum=0;
    	for(int i=0;i<=m;i++)
    		lst[i]=0;
    	for(int i=1;i<=n;i++)
    	{
    		sum=(sum+a[p[i]])%m;
    		if(i>=m)
    		{
    			sum=(sum+m-a[p[i-m+1]])%m;
    			lst[a[p[i-m+1]]]=p[i-m+1];
    		}
    		if(lst[(m-sum)%m]&&i>=m)
    		{
    			add(lst[(m-sum)%m]);
    			s+=' ';
    			for(int j=i-m+2;j<=i;j++)
    			{
    				add(p[j]);
    				s+=' ';
    			}
    			fout<<s;
    			return 0;
    		}
    	}
    }
}