QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#93782#6194. Knapsack ProblemEwiGKeiTWA 2ms3776kbC++144.2kb2023-04-02 13:28:252023-04-02 13:28:27

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-04-02 13:28:27]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 3776kb
  • [2023-04-02 13:28:25]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MOD=1e9+7;
const LL INF=1e9;
void rd(LL &x)
{
    x=0; LL fl=1; char c=getchar();
    while (!isdigit(c)) { if (c=='-') fl=-1;c=getchar(); }
    while (isdigit(c)) { x=(x<<1)+(x<<3)+(c^48);c=getchar(); }
    x*=fl;
    return;
}
LL T,k,c[25],a[25];
vector<LL> v[25];
pair<LL,LL> Co[25];
bool vis[25];
signed main()
{
    v[1].push_back(0),v[1].push_back(1); //3
    v[2].push_back(0),v[2].push_back(2); //5
    v[3].push_back(1),v[3].push_back(2); //6
    v[4].push_back(0),v[4].push_back(1),v[4].push_back(2); //7
    v[5].push_back(0),v[5].push_back(3); //9
    v[6].push_back(1),v[6].push_back(3); //10
    v[7].push_back(0),v[7].push_back(1),v[7].push_back(3); //11
    v[8].push_back(2),v[8].push_back(3); //12
    v[9].push_back(0),v[9].push_back(2),v[9].push_back(3); //13
    v[10].push_back(1),v[10].push_back(2),v[10].push_back(3); //14
    v[11].push_back(0),v[11].push_back(1),v[11].push_back(2),v[11].push_back(3); //15
    rd(T);
    while (T--)
    {
        rd(k);
        if (k==2)
        {
            for (LL i=1;i<4;i++) rd(c[i]);
            for (LL i=0;i<2;i++) rd(a[i]);
            LL ans=c[1]*a[0]+c[2]*a[1];
            if (c[3]-c[1]-c[2]>0) ans+=min(a[0],a[1])*(c[3]-c[1]-c[2]);
            printf("%lld\n",ans);
        }
        if (k==3)
        {
            for (LL i=1;i<8;i++) rd(c[i]);
            for (LL i=0;i<3;i++) rd(a[i]);
            Co[1]=make_pair(c[3]-c[1]-c[2],1);
            Co[2]=make_pair(c[5]-c[1]-c[4],2);
            Co[3]=make_pair(c[6]-c[2]-c[4],3);
            Co[4]=make_pair(c[7]-c[1]-c[2]-c[4],4);
            LL ans=c[1]*a[0]+c[2]*a[1]+c[4]*a[2];
            memset(vis,0,sizeof vis);
            for (LL i=1;i<=4;i++)
            {
                LL max=0,maxi=0;
                for (LL j=1;j<=4;j++)
                    if (!vis[j])
                    {
                        LL M=INF;
                        for (auto k:v[Co[j].second])
                            M=min(M,a[k]);
                        if (Co[j].first*M>max)
                        {
                            max=Co[j].first*M;
                            maxi=j;
                        }
                    }
                if (max==0) break;
                ans+=max;
                LL M=INF;
                for (auto k:v[Co[maxi].second])
                    M=min(M,a[k]);
                for (auto k:v[Co[maxi].second])
                    a[k]-=M;
                vis[maxi]=true;
            }
            printf("%lld\n",ans);
        }
        if (k==4)
        {
            for (LL i=1;i<16;i++) rd(c[i]);
            for (LL i=0;i<4;i++) rd(a[i]);
            Co[1]=make_pair(c[3]-c[1]-c[2],1);
            Co[2]=make_pair(c[5]-c[1]-c[4],2);
            Co[3]=make_pair(c[6]-c[2]-c[4],3);
            Co[4]=make_pair(c[7]-c[1]-c[2]-c[4],4);
            Co[5]=make_pair(c[9]-c[1]-c[8],5);
            Co[6]=make_pair(c[10]-c[2]-c[8],6);
            Co[7]=make_pair(c[11]-c[1]-c[2]-c[8],7);
            Co[8]=make_pair(c[12]-c[4]-c[8],8);
            Co[9]=make_pair(c[13]-c[1]-c[4]-c[8],9);
            Co[10]=make_pair(c[14]-c[2]-c[4]-c[8],10);
            Co[11]=make_pair(c[15]-c[1]-c[2]-c[4]-c[8],11);
            LL ans=c[1]*a[0]+c[2]*a[1]+c[4]*a[2]+c[8]*a[3];
            memset(vis,0,sizeof vis);
            for (LL i=1;i<=11;i++)
            {
                LL max=0,maxi=0;
                for (LL j=1;j<=11;j++)
                    if (!vis[j])
                    {
                        LL M=INF;
                        for (auto k:v[Co[j].second])
                            M=min(M,a[k]);
                        if (Co[j].first*M>max)
                        {
                            max=Co[j].first*M;
                            maxi=j;
                        }
                    }
                if (max==0) break;
                ans+=max;
                LL M=INF;
                for (auto k:v[Co[maxi].second])
                    M=min(M,a[k]);
                for (auto k:v[Co[maxi].second])
                    a[k]-=M;
                vis[maxi]=true;
            }
            printf("%lld\n",ans);
        }
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 3552kb

input:

3
2
1 2 4
4 5
3
3226252 19270256 2430652 1187613 12496062 10286165 17494834
24 85 34
4
901133 6693218 13245489 14740234 16186210 11382783 19277321 3855635 16523184 10168517 16195031 971041 10303441 8395899 11618555
529321239 218214127 92942310 207467810

output:

18
1949753378
7832404777567179

result:

ok 3 number(s): "18 1949753378 7832404777567179"

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 3776kb

input:

100
4
4488409 9842893 14331290 11289097 15777479 21131954 25620334 6146092 10634508 15988956 20477387 17435190 21923584 27278027 31766493
200477197 258791439 590664017 982949628
4
5484152 19851747 25335961 6555937 12039831 26407861 31891996 10897184 16381166 30749333 36233145 17453055 22937114 37304...

output:

16156444320083421
24565535429631234
29418799514760027
30685727712782520
21026118053726857
27272339796311010
28831028447377015
34577147721425537
9058894962996375
21525085254465501
6657185626333883
16750628297036040
11217846865301187
12674726744043780
33873234230125448
3890236872169782
319038768614465...

result:

wrong answer 3rd numbers differ - expected: '29418802996321901', found: '29418799514760027'