zoukankan      html  css  js  c++  java
  • Gym 100247A The Power of the Dark Side

    https://vjudge.net/problem/Gym-100247A

    题意:

    每个绝地武士有三个能力值a,b,c,两个武士决斗时谁有两个值大于对方谁就是胜者(a和a比,b和b比,c和c比,所有武士的三个值都不相同),现在可以交换任意武士的三个能力值位置,问有些可以击败其余所有武士。

    思路:

    肯定是用自己最大的两个能力值去和别的武士的较低的两个能力值相比,两者皆大就能赢,因为要赢所有人,所以先对所有武士能力排序,这样每个武士的能力值都是递增的了,对每个位置的能力值都维护一个最大值(只要赢了最大值的那个,那肯定能赢其余所有人)和次大值(因为这个最大值可能是自己本身,此时就需要看次大值)。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int maxn = 200000+5;
     7 
     8 int a[maxn][3];
     9 int mx[3],smx[3];
    10 int q[maxn];
    11 
    12 int main()
    13 {
    14     //freopen("in.txt","r",stdin);
    15     int n;
    16     scanf("%d",&n);
    17     for(int i=0;i<3;i++)  mx[i] = smx[i] = 0;
    18     for(int i=1;i<=n;i++)
    19     {
    20         scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
    21         sort(a[i],a[i]+3);
    22         smx[0] = max(mx[0],a[i][0]);
    23         if(smx[0]>mx[0])  swap(mx[0],smx[0]);
    24         smx[1] = max(mx[1],a[i][1]);
    25         if(smx[1]>mx[1])  swap(mx[1],smx[1]);
    26     }
    27 
    28     int ans = 0;
    29     for(int i=1;i<=n;i++)
    30     {
    31         int t1 = mx[0],t2 = mx[1];
    32         if(a[i][0]==t1)  t1 = smx[0];
    33         if(a[i][1]==t2)  t2 = smx[1];
    34         if(a[i][1]>t1 && a[i][2]>t2)  q[ans++]=i;
    35     }
    36     printf("%d
    ",ans);
    37     for(int i=0;i<ans;i++)
    38         printf("%d%c",q[i],i==ans-1?'
    ':' ');
    39     return 0;
    40 }
  • 相关阅读:
    pat 1034 Head of a Gang (30分)
    pta坑点
    Devc++ 编译 c++11
    Invitation Cards dijkstra法
    Cube Stacking
    畅通工程
    蚂蚁上树
    洛谷 P1439 【模板】最长公共子序列
    Recursive sequence
    A Simple Math Problem
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/8046401.html
Copyright © 2011-2022 走看看