Cod sursa(job #2092673)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 22 decembrie 2017 02:57:23
Problema Tricouri Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("tricouri.in");
ofstream g("tricouri.out");
int n,v[300002],m;
int sum[21][6][21];
short Ly,R,arr[21][21];
inline void prec()
{
    for(int Qt=2;Qt<=20;++Qt){
        for(int j=0;j<Qt;++j)
            for(int k=0;k<Qt;++k)
                arr[j][k]=(j+k)%Qt;
        for(int j=1;j<=n;++j){
            short Rose=v[j]%Qt;
            for(int p=4;p>=1;--p)
                for(int k=0;k<Qt;++k)
                    if(sum[Qt][p][k]>0)
                        sum[Qt][p+1][arr[Rose][k]]=max(sum[Qt][p+1][arr[Rose][k]],sum[Qt][p][k]+v[j]);
            sum[Qt][1][Rose]=max(sum[Qt][1][Rose],v[j]);
        }
    }
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)
        f>>v[i];
    memset(sum,-1,sizeof(sum));
    prec();
    for(int i=1;i<=m;++i)
    {
        f>>Ly>>R; /// I used to
        g<<sum[R][Ly][0]<<'\n';  ///g<<"Rose"<<'\n';
    }
    return 0;
}