洛谷P1199题解

每日链接:
一道水题
首先,我们来证明计算机是一个人工智障
 
总之,人是活的,计算机是死的,认真看的话,你会发现计算机很被动,每一次都比我们晚拿到武将。我们只需要保证我们拿已有的武将的搭配中和我们的武将搭配后第二犇的那位就行了(因为第一位被计算机拿走了)。游戏结束后,我们选出的武将肯定是某武将以及和他搭配第二的一名武将。利用先手优势,我们可以挑到最大的一个“第二的搭配”。这就是答案,计算机不可能赢我们。
 
如果还是不懂,我来写一下具体实施方法。首先读入,直接用邻接表,毕竟最多只有五百个武将。接下来,抓住每一个武将,对他的搭档进行排序,找到第二大的,比个max。最后输出,计算机不可能赢,直接输出1,再输出max。
代码时间:
#include <bits/stdc++.h>
#define INF 2147483647
#define _MATH_DEFINES_DEFINED
#pragma GCC optimize("O2")
using namespace std;
inline int read(void)
{
    int f = 1, n = 0;
    char c = getchar();
    while (!isdigit(c))
    {
        if (c == '-')
            f = -1;
        c = getchar();
    }
    while (isdigit(c))
    {
        n = n * 10 + (c - '0');
        c = getchar();
    }
    return f * n;
}
signed main(void)
{
    int n = read(), maxv = 0; //int n; cin>>n;
    int link[n + 1][n + 1];
    memset(link, 0, sizeof(link));
    for (int i = 1; i < n; i++)
    {
        for (int j = i + 1; j <= n; j++)
        {
            link[i][j] = read();
            link[j][i] = link[i][j];
        }
    }
    for (int i = 1; i <= n; i++)
    {
        sort(link[i] + 1, link[i] + n + 1);
        maxv = max(maxv, link[i][n - 1]);
    }
    cout << 1 << endl << maxv << endl;
    return 0;
}

 

有时候,贪心往往是最简单的解法。
posted @ 2020-08-14 22:10  running_hacker  阅读(145)  评论(0)    收藏  举报