首页 > 代码库 > “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 G

“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 G

最近,盛大计划开发一款手游,以下是简化版。系统和我方各有 头怪兽,每一头怪兽都有生命值和攻击力,并且当怪兽A攻击怪兽B,如果怪兽B的生命值高于怪兽A的攻击力,则怪兽B的生命力减少A的攻击力的数值,否则怪兽B将死亡。我方已经通过一些手段得知了系统怪兽的出战序列,我方想要知道,我方是否可以合理安排怪兽的出战序列,保证当系统的 头怪兽全部死亡时,而我方至少还存在一头怪兽。

所有怪兽是每秒攻击一次,即如果A和B战斗,A受到B的伤害的同时,B也受到A的伤害,直到一方死亡,换序列中的下一个怪兽,继续战斗。

第一行一个整数 ,表示测试组数。
对于每组数据,第一行输入一个整数1<=n<=10  , 表示怪兽的数目。
接下来 行,表示系统 头怪兽的出战序列,每一行两个整数 , , 1<=v<=1000  , 1<=a<=100  . 其中 表示生命值, 表示攻击力。
接下来 行,表示我方 头怪兽,但是出战序列可以由我方自己安排。每行两个整数,含义类似。

每组数据输出一行。如果我方可以通过合理安排怪兽的出战序列,保证当系统的 头怪兽全部死亡,而我方至少还存在一头怪兽,那么输出YES;否则输出NO

复制
2
2
5 4
4 3
3 2
5 4
2
5 4
4 3
3 2
5 5
NO
YES
解法:
1 必须知道这是炉石
2 数字很小我们可以考虑全排列
3 每种情况我们和第一种去比较(模拟过程)
 1 #include<bits/stdc++.h>
 2 #define N 123456
 3 #define LL long long
 4 using namespace std;
 5 struct Node{
 6     int x;
 7     int y;
 8 }node[N],nod[N];
 9 int n;
10 int t;
11 int ans[N];
12 int Solve(int ans[]){
13     Node pos1[N];
14     Node pos2[N];
15 
16     for(int i=0;i<n;i++){
17         pos1[i].x=nod[i+1].x;
18         pos1[i].y=nod[i+1].y;
19 
20     }
21 
22     for(int i=0;i<n;i++){
23         pos2[i].x=node[ans[i]].x;
24         pos2[i].y=node[ans[i]].y;
25 
26     }
27     int s=0,e=0;
28     while(s<n&&e<n){
29         while(pos1[s].x>0&&pos2[e].x>0){
30             pos1[s].x-=pos2[e].y;
31             pos2[e].x-=pos1[s].y;
32         }
33         if(pos1[s].x<=0){
34             s++;
35         }
36         if(pos2[e].x<=0){
37             e++;
38         }
39     }
40     if(s>=n&&e<n) return 1;
41     return 0;
42 }
43 int main(){
44     scanf("%d",&t);
45     while(t--){
46         scanf("%d",&n);
47         for(int i=0;i<n;i++){
48             ans[i]=i+1;
49         }
50         for(int i=1;i<=n;i++){
51             scanf("%d%d",&nod[i].x,&nod[i].y);
52         }
53         for(int i=1;i<=n;i++){
54             scanf("%d%d",&node[i].x,&node[i].y);
55         }
56         int flag=0;
57         do{
58             if(Solve(ans)){
59                 flag=1;
60                 break;
61             }
62         }while(next_permutation(ans,ans+n));
63         if(flag){
64             printf("YES\n");
65         }else{
66             printf("NO\n");
67         }
68     }
69     return 0;
70 }

 

“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 G