SSLOJ 1193.地主


题目:

传送门


分析:

直接组合数套上,不多说
然后值得一提的是题目超水的数据,连费马小定理都不用就可以 A C AC AC


代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring> 
#include<cstdlib>
#include<algorithm>
#include<set>
#include<queue>
#include<vector>
#include<map>
#include<list>
#include<ctime>
#include<iomanip>
#include<string>
#include<bitset>
#include<deque>
#include<set>
#define LL long long
#define ch cheap
#define XJQ 100000007
using namespace std;
inline LL read() {
    LL d=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
    return d*f;
}
int x[2005];
int a=read(),b=read();
void fac()
{
	x[1]=1;
	for(int i=2;i<=a*2;i++)
	  x[i]=x[i-1]*i%XJQ;
	return;
}
int main()
{
	fac();
	cout<<x[2*a]/(x[b]*x[2*a-b]);
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java斗地主地主代码是一种实现斗地主游戏的Java程序代码。一般包括如下内容: 1. 游戏规则的设计:如何洗牌、如何发牌、如何确定地主等。 2. 斗地主的基本功能:抢地主、出牌、结算分数等。 3. 界面设计:使用Java GUI技术实现界面的设计,包括按钮、图片等。 4. AI设计:实现智能电脑玩家,使得电脑玩家能够自动出牌和抢地主。 下面是一个简单的Java斗地主地主代码的实现: ``` //定义一个Card类,用来表示一张扑克牌 class Card { public String suit;//花色 public String rank;//点数 public int value;//牌的大小 } //定义一个Poker类,用来表示一副扑克牌 class Poker { private static String[] suits = {"♠", "♥", "♦", "♣"}; private static String[] ranks = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"}; private static int[] values = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; private List<Card> cards; public Poker() { cards = new ArrayList<Card>(); for (int i = 0; i < suits.length; i++) { for (int j = 0; j < ranks.length; j++) { Card card = new Card(); card.suit = suits[i]; card.rank = ranks[j]; card.value = values[j]; cards.add(card); } } Card redJoker = new Card(); redJoker.suit = "JOKER"; redJoker.rank = "Red Joker"; redJoker.value = 16; cards.add(redJoker); Card blackJoker = new Card(); blackJoker.suit = "JOKER"; blackJoker.rank = "Black Joker"; blackJoker.value = 17; cards.add(blackJoker); } //洗牌 public void shuffle() { Collections.shuffle(cards); } //发牌 public List<List<Card>> deal() { List<List<Card>> players = new ArrayList<List<Card>>(); for (int i = 0; i < 3; i++) { players.add(new ArrayList<Card>()); } for (int i = 0; i < 51; i++) { players.get(i % 3).add(cards.get(i)); } players.get(0).add(cards.get(51)); return players; } } //定义一个Player类,用来表示一个玩家 class Player { public String name;//玩家姓名 public List<Card> cards;//玩家手中的牌 public Player(String name) { this.name = name; cards = new ArrayList<Card>(); } } //定义一个Game类,用来表示斗地主游戏 class Game { private List<List<Card>> players; private List<Card> lastCards; private Player landlord; public void start() { Poker poker = new Poker(); poker.shuffle(); players = poker.deal(); //抢地主 for (int i = 0; i < 3; i++) { boolean isGrab = false; int count = 0; while (!isGrab && count < 3) { //模拟玩家操作 isGrab = grabLandlord(players.get(i)); count++; } if (isGrab) { landlord = new Player("玩家" + (i + 1)); landlord.cards.addAll(players.get(3)); System.out.println("玩家" + (i + 1) + "成为地主"); break; } } //出牌 while (true) { //模拟玩家操作 lastCards = playCards(landlord); if (lastCards == null) { break; } } //结算分数 for (int i = 0; i < 3; i++) { if (players.get(i) == landlord.cards) { continue; } int score = calculateScore(players.get(i)); System.out.println("玩家" + (i + 1) + "得分:" + score); } } //模拟玩家抢地主操作 public boolean grabLandlord(List<Card> cards) { //模拟随机抢地主或不抢 Random random = new Random(); return random.nextBoolean(); } //模拟玩家出牌操作 public List<Card> playCards(Player player) { //模拟随机出牌或不出 Random random = new Random(); if (random.nextBoolean()) { return null; } else { List<Card> cards = new ArrayList<Card>(); //模拟随机选择一组合法的牌出去 int index1 = random.nextInt(player.cards.size()); int index2 = random.nextInt(player.cards.size()); while (index2 == index1) { index2 = random.nextInt(player.cards.size()); } cards.add(player.cards.get(index1)); cards.add(player.cards.get(index2)); player.cards.removeAll(cards); return cards; } } //计算玩家得分 public int calculateScore(List<Card> cards) { int score = 0; for (Card card : cards) { if (card.suit.equals("♦")) { score += card.value; } if (card.rank.equals("K")) { score += 10; } if (card.rank.equals("A")) { score += 20; } if (card.rank.equals("2")) { score += 30; } } return score; } } public class Main { public static void main(String[] args) { Game game = new Game(); game.start(); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值