cjb-poi2011sticks

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

{{{
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#define rep(i,n) for(int i=1;i<=n;i++)
#define mp make_pair
#define pb push_back
using namespace std;
#define PI 3.1415926535897932384626433
#define N 1000010
#define LF double
#define stack stck
int f[100];
pair<int,int> a[1100000];
int n,k,tot=0;
int main()
{
    cin>>k;
    rep(i,k)
    {
        int p;
        scanf("%d",&p);
        rep(j,p)
        {
            int x; scanf("%d",&x);
            a[++tot]=mp(x,i);
        }
    }
    sort(a+1,a+tot+1);
    rep(i,tot)
    {
        int mx1=-1,mx2=-1;
        rep(j,k)
        {
            if (f[j]==0)continue;
            if (j==a[i].second)continue;

            if (mx1==-1 || f[j]>f[mx1])mx2=mx1,mx1=j;
            else if (mx2==-1 || f[j]>f[mx2])mx2=j;
        }
        if (mx1!=-1 && mx2!=-1 && f[mx1]+f[mx2]>a[i].first)
        {
            printf("%d %d %d %d %d %d\n",mx1,f[mx1],mx2,f[mx2],a[i].second,a[i].first);
            return 0;
        }
        f[a[i].second]=a[i].first;
    }
    puts("NIE");
    return 0;
}
}}}
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#define rep(i,n) for(int i=1;i<=n;i++)
#define mp make_pair
#define pb push_back
using namespace std;
#define PI 3.1415926535897932384626433
#define N 1000010
#define LF double
#define stack stck
int f[100];
pair<int,int> a[1100000];
int n,k,tot=0;
int main()
{
    cin>>k;
    rep(i,k)
    {
        int p;
        scanf("%d",&p);
        rep(j,p)
        {
            int x; scanf("%d",&x);
            a[++tot]=mp(x,i);
        }
    }
    sort(a+1,a+tot+1);
    rep(i,tot)
    {
        int mx1=-1,mx2=-1;
        rep(j,k)
        {
            if (f[j]==0)continue;
            if (j==a[i].second)continue;
            if (mx1==-1 || f[j]>f[mx1])mx2=mx1,mx1=j;
            else if (mx2==-1 || f[j]>f[mx2])mx2=j;
        }
        if (mx1!=-1 && mx2!=-1 && f[mx1]+f[mx2]>a[i].first)
        {
            printf("%d %d %d %d %d %d\n",mx1,f[mx1],mx2,f[mx2],a[i].second,a[i].first);
            return 0;
        }
        f[a[i].second]=a[i].first;
    }
    puts("NIE");
    return 0;
}