By Jalan
文章目录
知识工具需求
数学
数据结构和算法
语言
- cpp创建大数组的时间开销是很低的,要创别犹豫.
题干
装东西的时候不能放一起的别放一起比如氧化剂和易燃液体
输入条件
两个整数N<=10^4是不匹配的物品对,M<=100是物品表
然后有两块,第一部分是N个不匹配的对,第二部分是M组物品,第一个数是物品数K<=1000,后面是id5位数字
输出条件
对于这一组,能放得下输出Yes不能输出No
例子
例1
输入
6 3
20001 20002
20003 20004
20005 20006
20003 20001
20005 20004
20004 20006
4 00001 20004 00002 20003
5 98823 20002 20003 20006 10010
3 12345 67890 23333
输出
No
Yes
Yes
题解
第一次(点2超时)
思路
- 用一个int set< int> map保存输入进来的N对不合理
- 集合保存每对.
- 对每对问题做检验.
- 输出
预期时间复杂度
MKNlogN
编写用时
20分钟
代码
CPP
#include <map>
#include <set>
#include <stdio.h>
#include <vector>
using namespace std;
int main(int argc, char const *argv[])
{
map<int, set<int>> incomp;
int N, M;
scanf("%d %d", &N, &M);
for (int i = 0, a, b; i < N; i++)
{
scanf("%d%d", &a, &b);
incomp[a].insert(b);
incomp[b].insert(a);
}
for (int i = 0; i < M; i++)
{
int K;
scanf("%d", &K);
set<int> s;
for (int j = 0, tem; j < K; j++)
{
scanf("%d", &tem);
s.insert(tem);
}
bool safe = true;
for (auto check : s)
{
for (auto var : s)
{
if (incomp[check].find(var) != incomp[check].end())
{
safe = false;
break;
}
}
if (!safe)
{
break;
}
}
if (safe)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
运行用时
第二次
思路
把第一次里的set全换成vector了
同时更改了检验方法,使用一个100000hash散列进行检验.
预期时间复杂度
编写用时
20
代码
CPP
#include <map>
#include <set>
#include <stdio.h>
#include <vector>
using namespace std;
int main(int argc, char const *argv[])
{
map<int, vector<int>> incomp;
int N, M;
scanf("%d %d", &N, &M);
for (int i = 0, a, b; i < N; i++)
{
scanf("%d%d", &a, &b);
incomp[a].push_back(b);
incomp[b].push_back(a);
}
for (int i = 0; i < M; i++)
{
int K;
scanf("%d", &K);
vector<int> s;
for (int j = 0, tem; j < K; j++)
{
scanf("%d", &tem);
s.push_back(tem);
}
bool safe = true;
vector<int> test(100000);
for (int j = 0; j < s.size(); j++)
{
for (int k = 0; k < incomp[s[j]].size(); k++)
{
test[incomp[s[j]][k]]++;
}
}
for (int j = 0; j < s.size(); j++)
{
if (test[s[j]])
{
safe = false;
break;
}
}
if (safe)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
运行用时
结尾
看在我写了这么多注释的份上可以给我点个赞嘛,求求惹=]砰砰砰,给我加点写下去的油呀@.@
也欢迎关注我的CSDN账号呀,接下来两个月我应该会按这个格式更新所有的PTA甲级题目
**开心code每一天**