【qbxt】纸牌【解题报告】

1. 纸牌

题目描述

桌面上放着n张纸牌,每张纸牌有两面,每面都写着一个非负整数。你的邪王真眼可以看到所有牌朝上的一面和朝下的一面写的数字现在需要一些牌翻过来,使得所有朝上的一面中,至少有一半n/2)的数字是一样的求出最少需要翻几张牌,或者判断无解

注意翻牌的时候,你不能扔掉,不能偷偷把别的牌放进来,不能涂改牌上面的数字。

 

输入格式

第一行包含一个整数n,表示牌的数量;

接下来n行,每行两个非负整数ai, bi表示每张牌写的两个数字,ai对应朝上的一面,bi对应朝下的一面。

 

输出格式

如果有解,则输出一个整数,表示最少的翻牌次数,否则输出Impossible

 

样例输入1

3

1 2

2 1

3 4

 

样例输出1

1

 

样例解释1

第一张牌翻过来那么就有两个23朝上2数量超过半数。

 

样例输入2

3

1 2

3 4

5 6

 

样例输出2

Impossible

 

样例解释2

所有数字都只有一个,因此相同的数字数超过半数是不可能的

 

数据范围

测试点编号

n

ai, bi

1

≤10

≤103

2

3

≤103

4

5

≤5*104

≤106

6

7

≤3*105

8

9

≤109

10

对所有数据,有n>0ai, bi≥0。

 

对于20%,随便搜,枚举翻哪个。

对于80%,记录每个数字在正面出现的次数和在反面出现的次数,依次判断,注意有坑,就是正反一样,需要特判

对于100%,加个离散化

还有,操作次数至少是0,不能是负数,被这个坑了没a

代码:

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=300005;
 5 int n,p[maxn<<1][2],Min=0x3fffffff;
 6 struct gg{
 7     int val,bol,flag;
 8     bool operator < (const gg &o)const{
 9         return val<o.val;
10     }
11 }e[maxn<<1];
12 int main()
13 {
14     scanf("%d",&n);
15     for(int i=1;i<=n;i++){
16         int x,y;
17         scanf("%d%d",&x,&y);
18         e[i*2-1].val=x;
19         e[i*2-1].bol=1;
20         e[i*2].val=y;
21         e[i*2].bol=0;
22         if(x==y)e[i*2].flag=1;
23     }
24     sort(e+1,e+2*n+1);
25     e[0].val=-1;
26     int last=0,tem2=0;
27     for(int i=1;i<=2*n;i++){
28         if(e[i].flag)continue;    
29         if(e[i].val==e[tem2].val){
30             p[last][e[i].bol]++;
31         }
32         else {
33             p[++last][e[i].bol]++;
34         }
35         tem2=i;
36     }
37     for(int i=last;i>=1;i--){
38         if((p[i][1]+p[i][0])*2>=n){
39             Min=min(Min,max((n+1)/2-p[i][1],0));
40         }
41     }
42     if(Min!=0x3fffffff)printf("%d\n",Min);
43     else printf("Impossible\n");
44     return 0;
45 } 
View Code

 

转载于:https://www.cnblogs.com/hyghb/p/7780996.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi纸牌游戏是一款很受欢迎的单人纸牌游戏。游戏规则简单,但是有一定的策略性和挑战性。 在游戏开始时,首先需要准备52张扑克,将其洗乱并平铺在桌面上形成一个堆。然后,从堆中依次取出3张,并将它们放置在桌面上,这些将成为游戏的基础堆。接下来,从剩余的堆中翻开一张,放在基础堆的上方,这张被称为"Delphi"。 游戏的目标是通过合理的策略,依次将基础堆的按照从小到大的顺序堆放到相应的区域。堆的堆放规则是:每张都必须比其上方的小或者比其下方的大。如果某张无法进堆放,那么它将成为堆的底部。 游戏继续进,每次可以从剩余堆中翻开一张放在Delphi上方,并根据翻开的与基础堆的的关系进堆放。如果基础堆的所有都成功堆放到相应区域,那么游戏获胜。 Delphi纸牌游戏的挑战在于玩家需要合理利用剩余的堆和Delphi,通过观察和分析的分布情况,做出正确的选择,从而达到堆放的目标。 总的来说,Delphi纸牌游戏简单易学,但是需要一定的思考和决策,适合那些喜欢纸牌游戏的人挑战自己的智力和策略能力。 ### 回答2: Delphi纸牌游戏是一种经典的单人纸牌游戏,它是基于希腊神话的,所以得名Delphi。这个游戏需要一副标准的52张纸牌,并且需要在桌面上形成三个金字塔形状。 游戏的目标是将所有纸牌从金字塔中移除并且配对,直到没有剩余的纸牌可供选取。配对的规则是有点特别的,只有两个都是King或者两个的点数之和为13才能配对。例如,Ace(1点)可以和Queen(12点)进配对,2可以和Jack(11点)进配对,依此类推。 玩家需要在纸牌金字塔中的堆中选择可点击的纸牌,当一对纸牌配对成功时,这两张纸牌会被移除。而不能配对的纸牌则需要留在金字塔中。如果所有的纸牌配对成功并且被移除,则玩家获胜。然而,如果没有可供配对的纸牌且还有剩余纸牌,则游戏失败。 Delphi纸牌游戏需要玩家运用策略和记忆力。玩家需要选择性地将纸牌从金字塔中移除,以便留下更多匹配的机会。此外,在进配对选择时,玩家必须考虑到纸牌是如何叠放的,因为仅最上面的纸牌是可以点击的。 Delphi纸牌游戏是一种简单却有趣的纸牌游戏,它可以让玩家在休闲时间放松身心,同时也可以锻炼他们的逻辑思维和记忆力。无论是独自挑战还是与朋友们一起竞争,Delphi纸牌游戏都能为玩家带来乐趣和挑战。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值