测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A40410. 田忌赛马在田忌赛马的故事中,孙膑用自己的下等马对战对手的上等马,自己上等马对阵对手的中等马,自己的中等马对阵对手的下等马,从而赢得了胜利。现在即将进行的是N匹马的赛马比赛。双方队伍的马各分为N等。已知只有当我方马的等级比对方马等级高X等以上(包含X)时,我方才可以取得这场比赛的胜利。如果在N场比赛中我方的胜场数大于对方,则我方取得最终的胜利。现在已知对方这N场比赛的出战方案,请计算所有令我方最终…

填空题 中等

题目描述

田忌赛马

在田忌赛马的故事中,孙膑用自己的下等马对战对手的上等马,自己上等马对阵对手的中等马,自己的中等马对阵对手的下等马,从而赢得了胜利。现在即将进行的是N匹马的赛马比赛。双方队伍的马各分为N等。已知只有当我方马的等级比对方马等级高X等以上(包含X)时,我方才可以取得这场比赛的胜利。如果在N场比赛中我方的胜场数大于对方,则我方取得最终的胜利。现在已知对方这N场比赛的出战方案,

请计算所有令我方最终获胜的出战方案。

输入

第一行两个整数,N和X。N≤9, 0 ≤ X < N。 第二行N个正整数,A(1)…A(N)。A(i)表示第i场比赛对方

马的等级,1≤i≤N。等级越高越强

输出

按字典序输出所有我方最终获胜的方案,每个方案一行。每行是N个正整数,第i个数表示我方第i场比赛马的等级。

样例输入

样例1输入

3 1

3 2 1

样例2输入

3 0

3 1 2

样例输出

样例1输出

1 3 2

样例2输出

1 2 3

1 3 2

2 1 3

3 1 2

3 2 1

参考答案

#include<bits/stdc++.h> using namespace std; int n,x; int a[15];//对方 bool b[15];//我方可用马匹 int c[15];//我方出场顺序 void dfs(int step){ if(step>n){//如果都安排完了 int w=0;//赢得场数 for(int i=1;i<=n;i++){ if(c[i]-a[i]>=x){//赢了 w++; } } if(w>n/2){//赢超过一半 for(int i=1;i<=n;i++){ cout<<c[i]<<" ";//输出 } cout<<endl;//空格 } return; } for(int i=1;i<=n;i++){//循环按字典序安排马匹 if(b[i]==0){ b[i]=1; c[step]=i; dfs(step+1); b[i]=0; } } } int main(){ cin>>n>>x; for(int i=1;i<=n;i++){ cin>>a[i]; } dfs(1);//深搜 system("color 6");//按个人喜好调换颜色或删除 return 0; }
上一题 下一题