链接

[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的更多相关文章

  1. ZOJ 3601 Unrequited Love 浙江省第九届省赛

    Unrequited Love Time Limit: 16 Seconds      Memory Limit: 131072 KB There are n single boys and m si ...

  2. ZOJ 3601 Unrequited Love 【STL__pair_的应用】

    下面这个例子就是 STL:pair 的用法 #include <iostream> #include <utility> #include <string> usi ...

  3. ZOJ People Counting

    第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ  3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...

  4. ZOJ 3686 A Simple Tree Problem

    A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a rooted tree, each no ...

  5. ZOJ Problem Set - 1394 Polar Explorer

    这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...

  6. ZOJ Problem Set - 1392 The Hardest Problem Ever

    放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...

  7. ZOJ Problem Set - 1049 I Think I Need a Houseboat

    这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...

  8. ZOJ Problem Set - 1006 Do the Untwist

    今天在ZOJ上做了道很简单的题目是关于加密解密问题的,此题的关键点就在于求余的逆运算: 比如假设都是正整数 A=(B-C)%D 则 B - C = D*n + A 其中 A < D 移项 B = ...

  9. ZOJ Problem Set - 1001 A + B Problem

    ZOJ ACM题集,编译环境VC6.0 #include <stdio.h> int main() { int a,b; while(scanf("%d%d",& ...

随机推荐

  1. #Java学习之路——基础阶段二(第二篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  2. 面向对象(__item__)

    #Author : Kelvin #Date : 2019/1/20 21:37 class People: def __getitem__(self, item): print("geti ...

  3. Nosql与关系型数据库不同的使用场景

    Nosql 1.适合存储非结构化数据存储,数据量且不可预期.如:评论,文章 2.排行榜数据获取,实时更新的数据.如:游戏榜排名,用户投票 3.限时抢购活动.如:淘宝抢购活动 4.反垃圾系统.如:敏感词 ...

  4. mysql的学习笔记(六)

    1.字符函数 (1).CONCAT(str1,str2,...)函数,将多列信息合并输出. SELECT CATCAT('hello','mysql') as test (2).CONCAT_WS(' ...

  5. .NET Core微服务之ASP.NET Core on Docker

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Docker极简介绍 1.1 总体介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.D ...

  6. Python的魔法函数系列 __getattrbute__和__getattr__

      #!/usr/bin/env python # -*- coding: utf-8 -*- import sys __metaclass__ = type """ _ ...

  7. Flink的分布式缓存

    分布式缓存 Flink提供了一个分布式缓存,类似于hadoop,可以使用户在并行函数中很方便的读取本地文件,并把它放在taskmanager节点中,防止task重复拉取.此缓存的工作机制如下:程序注册 ...

  8. SLAM+语音机器人DIY系列:(二)ROS入门——3.在ubuntu16.04中安装ROS kinetic

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  9. git push提交报错,提示文件过大,且去掉大文件也报同样的错误

    错误原因: 大文件存在没有被提交的commit记录里面: 解决方案: 删除有大文件的commit记录即可 移除大文件的正确姿势 $ git rm --cached giant_file(文件名) # ...

  10. servlet doGet()方法获取字符串乱码问题

    当你遇到ajax向servlet发送数据出现乱码问题的时候不要惊慌,现有以下两个解决办法 (1)在doGet和doPost方法中添加以下代码 request.setCharactersEncoding ...