环形分牌【中位数】【前缀和】

减去平均值,求前缀和,排序
#include <bits/stdc++.h>
using namespace std;

#define MAX_N 1000010

int a[MAX_N], sum[MAX_N];

int main()
{
    int n;
    cin >> n;
    sum[0] = 0;
    long cnt = 0;
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];
        cnt += a[i];
    }
    int age = cnt / n;
    for(int i = 1; i <= n; i++)
    {
        a[i] -= age;
        sum[i] = sum[i - 1] + a[i];
    }
    sort(sum + 1, sum + 1 + n);
    int mid = (n + 1) >> 1;
    long long ans = 0;
    for(int i = 1; i <= n; i++)
    {
        ans += abs(sum[i] - sum[mid]);
    }
    cout << ans << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于Java模拟扑克牌的问题。我可以给您一些思路来实现这个功能。 首先,您需要定义一个扑克牌的类,包括花色和点数两个属性。例如: ```java public class Card { private String suit; // 花色 private int rank; // 点数 // 构造函数 public Card(String suit, int rank) { this.suit = suit; this.rank = rank; } // getter和setter方法 public String getSuit() { return suit; } public void setSuit(String suit) { this.suit = suit; } public int getRank() { return rank; } public void setRank(int rank) { this.rank = rank; } } ``` 然后,您需要创建一个扑克牌的集合。在这个集合中,包括所有的花色和点数的组合。例如: ```java public class Deck { private ArrayList<Card> cards; // 构造函数 public Deck() { cards = new ArrayList<Card>(); String[] suits = {"♠️", "♥️", "♦️", "♣️"}; for (String suit : suits) { for (int rank = 1; rank <= 13; rank++) { cards.add(new Card(suit, rank)); } } } // getter和setter方法 public ArrayList<Card> getCards() { return cards; } public void setCards(ArrayList<Card> cards) { this.cards = cards; } } ``` 接下来,您可以创建一个玩家的类,包括玩家的姓名、手牌等属性。例如: ```java public class Player { private String name; // 玩家姓名 private ArrayList<Card> hand; // 玩家手牌 // 构造函数 public Player(String name) { this.name = name; hand = new ArrayList<Card>(); } // getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public ArrayList<Card> getHand() { return hand; } public void setHand(ArrayList<Card> hand) { this.hand = hand; } // 玩家理牌方法 public void sortHand() { Collections.sort(hand, new Comparator<Card>() { @Override public int compare(Card c1, Card c2) { if (c1.getRank() != c2.getRank()) { return c1.getRank() - c2.getRank(); } else { return c1.getSuit().compareTo(c2.getSuit()); } } }); } } ``` 最后,您可以创建一个游戏的类,包括创建扑克牌集合、洗牌、发牌等方法。例如: ```java public class Game { private Deck deck; private ArrayList<Player> players; // 构造函数 public Game() { deck = new Deck(); players = new ArrayList<Player>(); } // getter和setter方法 public Deck getDeck() { return deck; } public void setDeck(Deck deck) { this.deck = deck; } public ArrayList<Player> getPlayers() { return players; } public void setPlayers(ArrayList<Player> players) { this.players = players; } // 洗牌 public void shuffle() { Collections.shuffle(deck.getCards()); } // 发牌 public void deal() { for (Player player : players) { for (int i = 0; i < 5; i++) { player.getHand().add(deck.getCards().remove(0)); } player.sortHand(); } } } ``` 以上就是一个简单的Java模拟扑克牌的实现方法。您可以根据自己的需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值