当前位置: 首页 > news >正文

UVa 565 Pizza Anyone

题目描述

题目要求为每个人准备一个披萨,使得每个人至少有一个要求被满足。每个人给出若干要求,每个要求是+(需要某种配料)或-(不需要某种配料)。配料共161616种(A\texttt{A}AP\texttt{P}P)。需要找到一个配料组合,使得对于每个人,至少有一个要求被满足。输出满足条件的配料(按字母顺序),若无解则输出No pizza can satisfy these requests.

输入格式

输入包含多个测试用例。每个测试用例由若干行组成,每行是一个人的要求列表(由若干+X-X组成,以分号结束),最后以一行单独的.结束。输入以文件结束符(EOF\texttt{EOF}EOF)终止。

输出格式

对于每个测试用例,输出一行Toppings:后跟字母列表(按字母顺序),若无解则输出No pizza can satisfy these requests.

样例

输入

+AB+C+D-E-F-G-H; -A-B+C+D-E-F+G+H; -A+B-C+D-E+F-G+H; +AB+C+D; +E+F+F+H; +AB-G; +O+J-F; +H+I+C; +P; +O+M+L; +M-L+P; +AB+C+D; +E+F+F+H; +AB-G; +P-O; +O+J-F; +H+I+C; +P; +O; +O+M+L; -O-P; +M-L+P; .

输出

Toppings: Toppings: CELP No pizza can satisfy these requests.

题目分析

本题的核心是查找满足所有约束的配料组合。由于配料只有161616种,可以枚举所有216=655362^{16} = 65536216=65536种可能组合,检查是否满足每个人至少一个要求。

约束表示

对于每个人,将其要求表示为两个位掩码:like\textit{like}like(需要该配料的集合)和unlike\textit{unlike}unlike(不需要该配料的集合)。设披萨配料组合为iii161616位掩码),则第jjj个人的要求被满足的条件为:
(i&like[j])≠0或(∼i&unlike[j])≠0 (i \& \text{like}[j]) \neq 0 \quad \text{或} \quad (\sim i \& \text{unlike}[j]) \neq 0(i&like[j])=0(i&unlike[j])=0

枚举

枚举所有iii000216−12^{16}-12161,检查是否满足所有人。找到的第一个解即为答案(按题意,输出字母顺序,但枚举顺序已保证字母顺序?实际上需要按字母顺序输出,但枚举时iii的二进制位顺序对应字母A\texttt{A}AP\texttt{P}P,输出时按位输出即可得到字母顺序)。

复杂度分析

216=655362^{16} = 65536216=65536,每人检查O(1)O(1)O(1),总O(65536×人数)O(65536 \times \text{人数})O(65536×人数),可接受。

代码实现

// Pizza Anyone// UVa ID: 565// Verdict: Accepted// Submission Date: 2016-08-18// UVa Run Time: 0.220s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intlike[12],unlike[12],counter=0;voidsetConstraint(string data){data.erase(data.end()-1);bitset<16>like_pizza(0),unlike_pizza(0);for(inti=0;i<data.length();i+=2){if(data[i]=='+')like_pizza.set(data[i+1]-'A');elseunlike_pizza.set(data[i+1]-'A');}like[counter]=like_pizza.to_ulong();unlike[counter]=unlike_pizza.to_ulong();counter++;}intmain(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);string line;while(getline(cin,line)){setConstraint(line);while(getline(cin,line),line!=".")setConstraint(line);boolsuccess=false;for(inti=0;i<=65536;i++){boolgood=true;for(intj=0;j<counter;j++)if((i&like[j])||(~i&unlike[j]))continue;else{good=false;break;}if(good){cout<<"Toppings: ";bitset<16>pizza(i);for(inti=0;i<16;i++)if(pizza.test(i))cout<<(char)('A'+i);cout<<'\n';success=true;break;}}if(!success)cout<<"No pizza can satisfy these requests.\n";counter=0;}return0;}
http://www.jsqmd.com/news/1062016/

相关文章:

  • 5分钟打造专业级音乐播放器:foobar2000终极美化指南
  • Python字符串格式化:从语法糖到工程能力分水岭
  • 2026音频转文字工具保姆级教程:免费付费电脑手机在线软件一站式操作指南 - 办公小帮手
  • 【总结】系统性能知识精华汇总
  • 云南桥梁工程质量检测靠谱机构 本地专业哪家更值得选,广告牌工程质量检测/学校房屋安全检测,工程质量检测源头公司哪家好 - 品牌推荐师
  • 2026杭州首饰线下探店,小众门店真实经营状况曝光 - 逸程
  • 终极GKD订阅规则库架构指南:实现自动化订阅管理的完整解决方案
  • 2026年济南铝镁锰板创新:外弧内弧设计引领新潮流 - 热点速览
  • Origami Simulator:如何用GPU并行计算重新定义折纸模拟的边界
  • 5步学会使用OpenCore Configurator:告别黑苹果配置烦恼的图形化工具
  • 2026保姆级教程:Word文档压缩大小怎么做?压缩图片、另存为瘦身全技巧
  • 工艺拆解:大漆器物机雕乱象与五轴数控雕刻技术优势分析
  • 2026天津卖黄金别踩坑!正规回收按大盘报价无套路 - 名奢变现站
  • 终极指南:用AntiMicroX让任何游戏都支持手柄控制 [特殊字符]
  • 天津旧金变现去哪?连锁奢汇高价回收不折旧 - 名奢变现站
  • 画线机专用墨水怎么选?翔隆笔业黄绿光浆体打印墨 Y3(651) - GrowthUME
  • 深圳市企业技术改造项目扶持计划申请与受理的工作程序
  • AI Agent四层技术栈:从大模型底座到工具调用的工业级落地
  • 2026青岛品牌首饰回收盘点:全域上门+无套路正规变现渠道测评 - 薛定谔的梨花猫
  • 青岛黄金回收哪家正规?主流机构解析,收的顶更值得岛城市民选择 - 奢侈品回收测评
  • 终极完整指南:如何简单快速地永久激活IDM下载管理器
  • 终极指南:使用OpenCore Legacy Patcher让老款Mac免费升级最新macOS系统
  • HCS08片上调试实战:DBG模块触发与跟踪窗口深度解析
  • DeepSeek核心技术解密:MoE架构、训练熔断与KV Cache内存优化
  • 三元锂电池和磷酸铁锂电池哪个好?全面对比分析 - 锂电池大全
  • i.MX23 DMA与内存控制器:信号量同步与EMI时序配置实战
  • 2026年上海板材全屋优质厂家 莫干山兔宝宝板材合作门店 - 企业名录优选推荐
  • 2026年6月潮州瓦楞纸箱厂推荐榜:我要买纸箱,帮我推荐下潮州哪家纸箱厂好 - 东社造纸
  • ESP32-C2隐藏功能揭秘:如何在Arduino-ESP32中解锁低成本WiFi芯片支持
  • 2026 合肥腾飞学校官方完整简章|28 年市级示范中职,师资管理、升学、政策全解读 - 辛云教育资讯