zoj 3601
链接
[https://vjudge.net/contest/293343#problem/B]
题意
就是n男m女。然后给出他们喜欢那些人
再给出q次询问
每次参加party的人
让你找出某个人满足喜欢在场的所有人而且在场所有人都不喜欢他
如果不存在输出0;
分析
首先这题目的样例是给出一个信息。就是他们可以搞基同性恋
就直接模拟就好了。关键怎样模拟使得更高效,就是查找更高效
你得保存每个人喜欢的人。直接把名字映射成数字就好了
map<string,int> 名字对应的数字
vector a[] 为啥不用vector a[] 用来保存每个人喜欢的人
他喜欢的人还没map过就gg了
下面为了更方便地查找你得
在把喜欢的关系映射一下、
map < pair<int,int>,int > P
后面舞会就查找了
给两份代码 一份是MLE的
具体看代码吧
代码
MLE
#include<bits/stdc++.h>
using namespace std;
#define ll long long
map<string,int> ma;
map<int,string> is;
vector<string> ve[70000];
map<pair<int,int>,int > mp;
int pa[70000];
int main(){
int t,m,n,k,q;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&q);
for(int i=0;i<n+m;i++){
ve[i].clear();
string l,bl;
cin>>l;
scanf("%d",&k);
ma[l]=i,is[i]=l;
//cout<<"i "<<i<<endl;
for(int j=0;j<k;j++)
{
cin>>bl;
ve[i].push_back(bl);
}
}
for(int i=0;i<n+m;i++)
for(int j=0;j<ve[i].size();j++)
mp[make_pair(i,ma[ve[i][j]])]=1;
while(q--){
scanf("%d",&k); string s;
for(int i=0;i<k;i++)
{
cin>>s;
pa[i]=ma[s];
}
bool flag;
for(int i=0;i<k;i++){
flag=1;
for(int j=0;j<k;j++){
if(i!=j){
if(mp[make_pair(pa[i],pa[j])]==0||mp[make_pair(pa[j],pa[i])]==1){
flag=0;
break;
}
}
}
if(flag) {
printf("1 ");
cout<<is[pa[i]]<<"\n";
break;
}
}
if(!flag) puts("0");
}
cout<<endl;
}
return 0;
}
AC代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
map<string,int> ma;
map<int,string> is;
vector<string> ve[70000];
map<pair<int,int>,int > mp;
string str[70000];
int pa[70000];
int main(){
int t,m,n,k,q;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&q);
mp.clear();
ma.clear();
for(int i=0;i<n+m;i++){
ve[i].clear();
string l,bl;
cin>>l;
scanf("%d",&k);
ma[l]=i;
for(int j=0;j<k;j++)
{
cin>>bl;
ve[i].push_back(bl);
}
}
for(int i=0;i<n+m;i++)
for(int j=0;j<ve[i].size();j++)
mp[make_pair(i,ma[ve[i][j]])]=1;
while(q--){
scanf("%d",&k); string s;
for(int i=0;i<k;i++)
{
cin>>str[i];
pa[i]=ma[str[i]];
}
bool flag;
for(int i=0;i<k;i++){
flag=1;
for(int j=0;j<k;j++){
if(i!=j){
if(mp[make_pair(pa[i],pa[j])]==0||mp[make_pair(pa[j],pa[i])]==1){
flag=0;
break;
}
}
}
if(flag) {
cout<<1<<" "<<str[i]<<"\n";
break;
}
}
if(!flag) puts("0");
}
puts("");
}
return 0;
}
zoj 3601的更多相关文章
- ZOJ 3601 Unrequited Love 浙江省第九届省赛
Unrequited Love Time Limit: 16 Seconds Memory Limit: 131072 KB There are n single boys and m si ...
- ZOJ 3601 Unrequited Love 【STL__pair_的应用】
下面这个例子就是 STL:pair 的用法 #include <iostream> #include <utility> #include <string> usi ...
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
- ZOJ 3686 A Simple Tree Problem
A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a rooted tree, each no ...
- ZOJ Problem Set - 1394 Polar Explorer
这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...
- ZOJ Problem Set - 1392 The Hardest Problem Ever
放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...
- ZOJ Problem Set - 1049 I Think I Need a Houseboat
这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...
- ZOJ Problem Set - 1006 Do the Untwist
今天在ZOJ上做了道很简单的题目是关于加密解密问题的,此题的关键点就在于求余的逆运算: 比如假设都是正整数 A=(B-C)%D 则 B - C = D*n + A 其中 A < D 移项 B = ...
- ZOJ Problem Set - 1001 A + B Problem
ZOJ ACM题集,编译环境VC6.0 #include <stdio.h> int main() { int a,b; while(scanf("%d%d",& ...
随机推荐
- Reading task(Introduction to Algorithms. 2nd)
Introduction to Algorithms 2nd ed. Cambridge, MA: MIT Press, 2001. ISBN: 9780262032933. Introduction ...
- python-memcached学习笔记
介绍: memcached是免费.开源.高性能.分布式内存对象的缓存系统(键/值字典),旨在通过减轻数据库负载加快动态web应用程序的使用. 数据类型:只用一种字符串类型 1:安装 sudo apt- ...
- 网络协议 17 - HTTPDNS:私人定制的 DNS 服务
[前五篇]系列文章传送门: 网络协议 12 - HTTP 协议:常用而不简单 网络协议 13 - HTTPS 协议:加密路上无尽头 网络协议 14 - 流媒体协议:要说爱你不容易 网络协议 15 - ...
- 在dotnet core下去中心化访问HTTP服务集群
一般应用服务都会部署到多台服务器之上,一.可以通过硬件得到更多的并发处理能力:二.可以避免单点太故障的出现,从而确保服务7X24有效运作.当访问这些HTTP服务的情况一般都是经过反向代理服务进行统一处 ...
- Data Warehouse
Knowledge Discovery Process OLTP & OLAP 联机事务处理(OLTP, online transactional processing)系统:涵盖组织机构大部 ...
- Kafka、ActiveMQ、RabbitMQ、RocketMQ 区别以及高可用原理
为什么使用消息队列 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务 ...
- 遍历 Map 的四种方法
public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...
- 极光推送经验之谈-Java后台服务器实现极光推送的两种实现方式
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6439313.html Java后台实现极光推送有两种方式,一种是使用极光推送官方提供的推送请 ...
- JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...
- 基于IIS的WCF
(1)创建WCF服务应用程序 (2)配置IIS 将WCF服务应用程序配置IIS网站,需要使用.net4.0集成版本的程序池 (3)使用SvcUtil.exe生成客户端代码和配置 SvcUtil.exe ...