【基礎完全搜索】USACO Bronze 2019 January - 猜動物Guess the Animal

題目描述

當奶牛貝茜和她的朋友艾爾西玩膩了常見的貝殼游戲后,她們喜歡玩另一個經典游戲"猜動物"。

游戲開始時,貝茜會在心中選定一種動物(大多數時候她都會選奶牛,這讓游戲變得相當無聊,不過偶爾貝茜也會發揮創意選擇其他動物)。接著艾爾西通過提出一系列問題來推斷貝茜選擇的動物。每個問題都會詢問該動物是否具有某種特定特征,貝茜則用"是"或"否"來回答。例如:

艾爾西:“這種動物會飛嗎?”
貝茜:“不會”
艾爾西:“這種動物吃草嗎?”
貝茜:“吃”
艾爾西:“這種動物產奶嗎?”
貝茜:“產”
艾爾西:“這種動物會哞哞叫嗎?”
貝茜:“會”
艾爾西:“那我猜這是頭奶牛。”
貝茜:“答對了!”

如果我們把"候選集合"定義為當前所有符合艾爾西已提問特征的動物集合,那么艾爾西會持續提問,直到候選集合只剩一種動物,這時她就會宣布答案。每個問題中,艾爾西會從候選集合中某個動物的特征里選取提問(即使這個特征可能無法進一步縮小候選范圍)。她絕不會重復詢問同一個特征。

已知貝茜和艾爾西了解的所有動物及其特征,請計算在確定正確答案前,艾爾西可能獲得的最大"是"回答次數。

輸入格式

第一行輸入動物數量 (2≤N≤1002≤N≤1002N100)。

接下來 NNN 行,每行描述一個動物,格式為:動物名稱開頭,接著一個整數 (1≤K≤1001≤K≤1001K100),然后是 KKK 個該動物的特征。

動物名稱和特征都是由不超過 202020 個小寫字母 (a..z) 組成的字符串。任意兩個動物的特征組合都不會完全相同。

輸出格式

輸出一個整數,表示游戲結束前艾爾西可能獲得的最大"是"回答次數。

輸入輸出樣例

輸入 #1

4
bird 2 flies eatsworms
cow 4 eatsgrass isawesome makesmilk goesmoo
sheep 1 eatsgrass
goat 2 makesmilk eatsgrass

輸出 #1

3

樣例說明

在這個樣例中,艾爾西最多能獲得 333 次"是"的回答(如上文對話所示),無法獲得超過 333 次的"是"回答。

提交鏈接

Guess the Animal

思路分析

關鍵觀察:最多“是”回答的情況是:她先問某一對動物共有的所有特征(每個都答“是”,但這兩個動物仍都在候選集合里),然后再問一個只屬于其中一個的額外特征得到最后一個“是”使候選集合縮到唯一。

因此:答案 = 任意一對動物之間共有特征數的最大值 + 1。

  1. 枚舉所有動物對

    對于所有 i<ji<ji<j 的動物對(即每一對不同動物),計算它們之間的共有特征數。

    具體做法是:對第 iii 只動物的每個特征 ititit,再和第 jjj 只動物的每個特征 isisis 逐一比較,相等時計數 same++same++same++

  2. 維護最大共有特征

    每對算出的共有特征數 samesamesame 和當前記錄的最大 MxMxMx 比較,取較大者。

    循環結束后,MxMxMx 就是任意一對動物之間共有特征數的最大值。

  3. 輸出最終答案

    輸出 Mx+1Mx + 1Mx+1,即在最糟情況下能得到的最多“是”回答次數。

時間復雜度:O(n2?K2)O(n^2 \cdot K^2)O(n2?K2)

參考代碼:

#include <bits/stdc++.h>
using namespace std;int main()
{// freopen("guess.in", "r", stdin);// freopen("guess.out", "w", stdout);int n, mx = 0, id;cin >> n;vector<int> k(n + 1);vector<string> animal(n + 1);vector<vector<string>> Te(n + 1);map<string, int> mp;for (int i = 1; i <= n; i++){cin >> animal[i]; // 動物的名字cin >> k[i];	  // k個特征for (int j = 0; j < k[i]; j++){string s;cin >> s; // 每一個特征Te[i].push_back(s); // 第i個動物的每一個特征}}int Mx = 0;//求任意兩個動物之間的共同特征for(int i = 1; i <= n; i++){for(int j = i + 1; j <= n; j++){int same = 0;for(auto it : Te[i])for(auto is : Te[j])if(it == is)same++;Mx = max(Mx , same);}}cout << Mx + 1;return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94362.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94362.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94362.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring IoC容器與Bean管理

代碼結構spring01/ ├── pom.xml ├── spring01.iml └── src/├── main/│ ├── java/│ │ └── com/│ │ └── demo/│ │ ├── bean/│ │ │ ├── Demo.java│ │ │ ├── Emp1.java│ │ …

【QT】概述

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;QT 文章目錄1. Qt基礎入門1.1 什么是Qt1.2 Qt的歷史與發展1.3 Qt的核心特性2. Qt架構深度解析3. Qt開發環境搭建4. Qt應用開發實戰4.1 項目結構4.2 設計用戶界面4.3 實現功能邏輯4.4 數據持久化4.5 美化界面4.6 添加動畫效果5. …

直播帶貨系統源碼開發:山東布谷科技9年海內外電商直播研發技術深耕之路

在數字化浪潮的席卷下&#xff0c;電商行業歷經多次變革&#xff0c;直播帶貨作為其中的新興力量&#xff0c;已成為推動商品銷售與品牌傳播的關鍵引擎。山東布谷科技&#xff0c;憑借其在直播帶貨系統開發領域長達9年的深厚積淀&#xff0c;為電商直播帶貨系統源碼定制開發提供…

20250731解決RK3588的AIOT參考設計刷機之后可以啟動但是斷電進MASKROM模式

20250731解決RK3588的AIOT參考設計刷機之后可以啟動但是斷電進MASKROM模式 2025/7/31 20:42緣起&#xff1a;編譯RK3588原廠的Android14、buildroot(linux-6.1)的EVB7V11之后刷AIOT&#xff0c;可以啟動。 但是通過命令關機之后&#xff1a;按POWER按鍵無法啟動。 Android14 re…

永洪科技華西地區客戶交流活動成功舉辦!以AI之力錨定增長確定性

在全球經濟進入“慢周期”的背景下&#xff0c;企業對確定性增長工具的渴求達到前所未有的高度。近日&#xff0c;永洪科技在成都成功舉辦華西地區客戶交流會&#xff0c;以“擁抱AI邁進數據智能時代”為主題&#xff0c;匯聚金融、制造、能源、消費品等領域的百余家頭部企業代…

Electron 作品【AI聊天】桌面應用 —— 系列教程(含開源地址)

效果預覽 開源地址 https://gitee.com/sunshine39/electron-vue3-AIchat 系列教程 Electron Forge【實戰】桌面應用 —— AI聊天&#xff08;上&#xff09;Electron Forge【實戰】桌面應用 —— AI聊天&#xff08;中&#xff09;Electron Forge【實戰】桌面應用 —— AI聊天&…

JS--獲取事件的子元素與父元素

原文網址&#xff1a;JS--獲取事件的子元素與父元素-CSDN博客 簡介 本文介紹JS如何獲取事件的子元素與父元素。 情景描述 事件監聽寫在父元素上&#xff0c;我點擊子元素時觸發了事件&#xff0c;怎樣通過事件獲取子元素和這個父元素&#xff1f; 點擊子元素時&#xff0c…

PPT自動化 python-pptx - 11 : 備注頁 (Notes Slides)

在 PowerPoint 演示文稿的自動化處理中&#xff0c;備注頁的操作常常被忽略&#xff0c;但實際上它在演講者輔助、內容管理等場景中有著重要作用。本文將結合 python-pptx 庫&#xff0c;詳細講解 PowerPoint 備注頁的概念、與備注母版的關系&#xff0c;以及如何通過代碼實現備…

【Python小工具】圖片轉PDF

文章目錄0 前言1 主要功能的實現2 拖拽運行的實現3 檢查細節【未成功實現】4 總結0 前言 不知道大家是否遇到過這種情況&#xff0c;提交材料時需要將多個圖片材料整合到一個PDF中上傳。這個時候我們需要找一個工具&#xff0c;其作用為接收我們給它的若干張圖片&#xff0c;并…

零售消費行業研究系列報告

消費者洞察報告&#xff1a;即時零售美妝用戶消費行為躍遷 食品飲料行業深度&#xff1a;新消費研究之三&#xff1a;即時零售應需而生&#xff0c;酒類品牌或迎新機遇 2025年上半年連鎖零售門店發展藍皮書 商貿零售行業新消費細分賽道投資機會梳理&#xff1a;新消費勢能向…

Uniapp 驗證 HTTPS 協議

Uniapp 中 驗證 HTTPS協議的是示例代碼<template><view class"content"><view style"margin-top: 20px;"><text>sslVerify : {{text}}</text></view><view><button click"testSslVerify">sslVe…

可視化圖解算法57:字符串的排列

牛客網 面試筆試 TOP101 | LeetCode 3437. 全排列III 1. 題目 描述 輸入一個長度為 n 字符串&#xff0c;打印出該字符串中字符的所有排列&#xff0c;你可以以任意順序返回這個字符串數組。 例如輸入字符串ABC,則輸出由字符A,B,C所能排列出來的所有字符串ABC,ACB,BA…

Go語言常量

目錄 前言&#xff1a; 1、const聲明常量 2、一次聲明多個常量 前言&#xff1a; 這次來學習一下Go語言中的常量&#xff0c;在上一期中我學習了Go語言中的變量&#xff0c;如果有興趣可以看看我往期的文章&#xff0c;或者點擊Go語言聲明變量。 相對于變量&#xff0c;常量的…

SelectDB:新一代實時數倉的核心引擎與應用實戰

> 數據價值隨時間流逝而衰減,而SelectDB讓企業在數據洪流中抓住了每一秒的價值 在數字化轉型浪潮中,企業數據呈現**爆發式增長**,傳統數據倉庫在實時性、查詢效率和成本控制方面遭遇嚴峻挑戰。中通快遞的案例極具代表性——其原有架構處理分鐘級查詢時,資源消耗巨大,…

華為OD機考2025C卷 - 分配土地 (Java Python JS C++ C )

題目描述 從前有個村莊,村民們喜歡在各種田地上插上小旗子,旗子上標識了各種不同的數字。 某天集體村民決定將覆蓋相同數字的最小矩陣形的土地分配給村里做出巨大貢獻的村民,請問此次分配土地,做出貢獻的村民種最大會分配多大面積? 輸入描述 第一行輸入 m 和 n, m 代…

NetBSD notes

文章目錄the introduce to NetBSDreferencesthe introduce to NetBSD NetBSD is a Unix-like Open Source operating system, which can run in many hardware platforms , and is advantageous to production and research.> boot hd0a:netbsd is used for booting NetBSD…

【數據遷移】Windows11 下將 Ubuntu 從 C 盤遷移到 D 盤

由于個人情況存在差異&#xff0c;請在參考本文進行數據遷移前后多方比對確認&#xff0c;確保無誤后再謹慎操作&#xff01; 【2025-08-03補充】運行過程中發現實際上 docker 的遷移工作可能更為復雜&#xff01;強烈不推薦本文的 docker 遷移方法&#xff08;本文已翻車&…

Java面試(常考基礎知識點)總結

1. 面向對象三大特性相關 1.1 三大特性 封裝&#xff1a;對抽象的事物抽象化成一個對象&#xff0c;并對其對象的屬性私有化&#xff0c;同時提供一些能被外界訪問屬性的方法&#xff1b;繼承&#xff1a;子類擴展新的數據域或功能&#xff0c;并復用父類的屬性與功能&#x…

[Shell編程] 零基礎入門 Shell 編程:從概念到第一個腳本

目錄 一、什么是 Shell&#xff1f;—— 連接用戶與系統的 "橋梁" 二、常見的 Shell 類型 —— 不同系統的 "操作面板" 三、Shell 能做什么&#xff1f;—— 不止于 "輸入命令" 1??命令行操作&#xff1a;這是最基礎的功能。通過ls&#x…

【數據結構】排序(sort) -- 插入排序

目錄 一、插入排序 二、直接插入排序&#xff08;straight insertion sort&#xff09; 1. 思路介紹 2. 代碼實現 3. 特性總結 三、希爾排序&#xff08;Shell sort&#xff09; 1. 思路介紹 2. 代碼實現 3. 特性總結 四、總結 一、插入排序 常見的排序算法有&…