1024_chess

每日一练社区 2023-10-19 22:37:54

有一种棋子游戏,游戏中每个棋子上标有两个不超过 6 的正整数,且前一个数小于等于后一个数,例如 16 44 23 都是合法的棋子。因此,共有 21 种不同的棋子。

如果三个棋子至少满足以下条件之一,则称这三个棋子构成了一组搭子:

三个棋子完全相同,例如 25 25 25
三个棋子上标注的共六个数字恰好取遍了 1 到 6,例如 15 34 26
* 三个棋子上标注的数字中,某种数字出现了 5 次,例如 66 26 66

输入 $n$ 个棋子($n$ 是 3 的倍数),你需要将这些棋子分成 $n/3$ 组,并希望尽可能多的组恰好能成为一组搭子。求最优方案下能形成多少组搭子?

输入描述:

从标准输入读入数据。

每个输入文件含有多个输入数据,第一行包含两个整数,分别是输入数据的个数 $T$ 和 $n$(每个输入文件的多个输入数据的 $n$ 是相同的)。

接下来 $T$ 行,每行含有 $n$ 个元素,依次表示每个棋子。

输出描述:

输出到标准输出。

输出 $T$ 行,每行包含一个整数,表示答案。

输入样例:

plain<br/>3 9<br/>12 24 45 22 36 24 22 23 24<br/>12 24 45 22 36 24 22 23 25<br/>12 24 45 22 36 24 22 22 22<br/><br/>

输出样例:

plain<br/>3<br/>2<br/>3<br/><br/>

样例解释

对于第一个输入数据,可以分成 12 45 36 | 24 24 24 | 22 22 23,形成 3 组搭子;
对于第二个输入数据,无论怎么分,最多只能形成 2 组搭子;
* 对于第三个输入数据,可以分成 12 45 36 | 24 22 22 | 24 22 22,形成 3 组搭子。

...全文
647 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
luckydreamguo 2024-09-23
  • 打赏
  • 举报
回复

def is_same(c1, c2, c3):
return c1 == c2 == c3

def is_full_set(c1, c2, c3):
all_numbers = {int(digit) for c in (c1, c2, c3) for digit in str(c)}
return all_numbers == {1, 2, 3, 4, 5, 6}

def is_five_occurrences(c1, c2, c3):
from collections import Counter
count = Counter()
for c in (c1, c2, c3):
count.update(str(c))
return any(v >= 5 for v in count.values())

def can_form_triplet(c1, c2, c3):
return is_same(c1, c2, c3) or is_full_set(c1, c2, c3) or is_five_occurrences(c1, c2, c3)

def backtrack(chess_pieces, used, current_count):
if all(used):
return current_count

max_count = 0
for i in range(len(chess_pieces)):
    if used[i]:
        continue
    for j in range(i + 1, len(chess_pieces)):
        if used[j]:
            continue
        for k in range(j + 1, len(chess_pieces)):
            if used[k]:
                continue
            
            used[i] = used[j] = used[k] = True
            new_count = current_count + (1 if can_form_triplet(chess_pieces[i], chess_pieces[j], chess_pieces[k]) else 0)
            max_count = max(max_count, backtrack(chess_pieces, used, new_count))
            used[i] = used[j] = used[k] = False
            
return max_count

def solve_test_case(chess_pieces):
n = len(chess_pieces)
used = [False] * n
return backtrack(chess_pieces, used, 0)

import sys

input = sys.stdin.read
data = input().strip().splitlines()

T, n = map(int, data[0].split())
results = []

for i in range(1, T + 1):
chess_pieces = list(map(int, data[i].split()))
result = solve_test_case(chess_pieces)
results.append(result)

for res in results:
print(res)

我的毕业设计,实现了一个具有小型网络游戏特征的四国军旗游戏,有一个完整的框架,数据库、服务器、客户端、大厅、游戏框架、玩家信息、游戏中的聊天、广告信息、以及防止了闪烁的画面,游戏音乐等 给网络游戏的初学者一些参考 文件列表如下: 网络游戏-四国军棋 .................\客户端.exe .................\数据库 .................\......\user_Data.MDF .................\......\user_Log.LDF .................\服务器.exe .................\毕业论文说明书 .................\..............\中文封面.doc .................\..............\中文摘要.doc .................\..............\任务书.doc .................\..............\文献综述.doc .................\..............\文献综述封面.doc .................\..............\答辩申请表.doc .................\..............\网络游戏-四国军棋论文.doc .................\..............\英文封面.doc .................\..............\英文摘要.doc .................\..............\评阅表.doc .................\..............\鉴定意见表.doc .................\源程序 .................\......\CGameHallFrame .................\......\..............\CGameHallFrame.aps .................\......\..............\CGameHallFrame.cpp .................\......\..............\CGameHallFrame.dsp .................\......\..............\CGameHallFrame.dsw .................\......\..............\CGameHallFrame.h .................\......\..............\CGameHallFrame.ncb .................\......\..............\CGameHallFrame.opt .................\......\..............\CGameHallFrame.plg .................\......\..............\CGameHallFrame.rc .................\......\..............\CGameHallFrameDoc.cpp .................\......\..............\CGameHallFrameDoc.h .................\......\..............\CGameHallFrameView.cpp .................\......\..............\CGameHallFrameView.h .................\......\..............\Client.cpp .................\......\..............\Client.h .................\......\..............\ClientProtocol.cpp .................\......\..............\ClientProtocol.h .................\......\..............\Debug .................\......\..............\GameDlg.cpp

11,808

社区成员

发帖
与我相关
我的任务
社区描述
Study well and make progress every day
其他 企业社区
社区管理员
  • 每日一练社区
  • CSDN学习
  • 幻灰龙
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧