比赛排名

GitHub跳转原题关系图返回列表

题意与原解析均从本地 OpenJudge 缓存迁移。

OJ: noi_openjudge

题目 ID: ch0201-2673

难度:未知

标签:

日期: 2026-07-30 23:01

题意

完整题面见同目录的 problem.md

思路

代码

cpp
#include <bits/stdc++.h>
using namespace std;

int _rank[]  ={0,1,2,3,4,5};

#define A 1
#define B 2
#define C 3
#define D 4
#define E 5


/* 第i名选手是不是正确 */
bool isright(int i){
    int a = _rank[i];
    if( a == 1){
        return _rank[1] == E;
    }
    else if ( a == 2){
        return _rank[2] == B;
    }
    else if( a == 3){
        return _rank[5] == A;
    }
    else if( a == 4){
        return _rank[1] != C;
    }
    else 
        return _rank[1] ==D;
}

/* 挑选A,B ... 的名次 */
int pick(int a){
    int i;
    for(i=1;i<=5;i++){
        if( _rank[i] == a)
            return i;
    }
    return -1;
}

int main(){
    
    do {
        if(
                ( _rank[2] != E && _rank[3] !=E) &&
                ( isright(1) ) &&
                ( isright(2) ) &&
                ( isright(3) == false ) &&
                ( isright(4) == false ) &&
                ( isright(5) == false ) 
                ){
            int i;
            for(i=1;i<=5;i++){
                printf("%d\n",pick(i));
            }
        }

    }
    while( next_permutation(_rank+1, _rank+6));
    return 0;
}

复杂度

总结