gym/101086 M Stairway to Heaven map set string、int对应 综合应用
来源:互联网 发布:在线php编辑器 编辑:程序博客网 时间:2024/05/22 00:36
#include<bits/stdc++.h>
#include <iostream>
#include <algorithm>
typedef long long ll;
typedef unsigned long long ull;
#define IO ios_base::sync_with_stdio(0),cin.tie(0)
using namespace std;
#define rep(i,a,b) for(ll i = a; i<=b ;++i)
#define per(i,a,b) for(ll i = a; i>=b ;--i)
#define N 400
#define maxn 100100
/*
Stairway to Heaven
给出n个比赛开始时间,结束时间,志愿者人数及名单,
输出参加的比赛时间有重合的志愿者名字,按字母序输出
很朴素的想法,先把队伍映射成标号,然后vis区间标记它的开始时间和结束时间,如果发生冲突则放入set里面,
因为set本身就是按字典排序,因此最后直接输出就行。
*/
map<string, int> mp;//map 志愿者人名与人名编号的 映射
set<string> ans;//ans 志愿者人名答案 集合
int vis[maxn][N];// 志愿者人名在某段时间内是否存在的 二维数组
string name, contest;
int main()
{IO;
int t, n, v, sta, ed;// 开始、 结束时间
cin >> t;
while ( t-- )
{
mp.clear();
ans.clear();
memset(vis, 0, sizeof(vis) );
cin >> n;
int cnt = 0;
for(int i = 0; i < n; i++)
{
cin >> contest >> sta >> ed >> v;
for(int j = 0; j < v; j++)
{
cin >> name; // 输入志愿者名字
// 先用map 将字符串 与 标号 对应
if( !mp.count( name )) // 如果志愿者名字不存在mp中
mp[ name ] = ++cnt; //将name添加入mp中 并且从++cnt
//map.conut 返回1 或 0
//map.find 返回 地址 或 map.end()
// 再用 int& m 取map中的编号
// 字符串 整型编号 双边对应 进行枚举
int& m = mp[ name ]; // m 为 name 在 mp 中的地址 或者 int m 没关系
cout << m << ' ' << &m << ' ' << endl;
// int& &&&
for( int k = sta; k <= ed; k++) // 枚举k的时间变量 从sta到ed
{
if( vis[m][k] ) // 如果m这个人 在k的时间内已存在, 则冲突
ans.insert( name ); //将name插入到ans答案集合中
vis[m][k] = 1; // 把sta 到 ed 的时间区域全部置于 1 , 已访问
}
}
}
// 插入 set 中的元素已经按照 从小到大排好序了
cout << ans.size() <<endl;
for(set< string > :: iterator it = ans.begin(); it != ans.end(); it++)
cout << *it << endl;
}
}
/*不冲突的情况:
. .
. .
冲突的情况:
. .
. .
. .
. .
. .
. .
不冲突的情况少,
*/
#include <iostream>
#include <algorithm>
typedef long long ll;
typedef unsigned long long ull;
#define IO ios_base::sync_with_stdio(0),cin.tie(0)
using namespace std;
#define rep(i,a,b) for(ll i = a; i<=b ;++i)
#define per(i,a,b) for(ll i = a; i>=b ;--i)
#define N 400
#define maxn 100100
/*
Stairway to Heaven
给出n个比赛开始时间,结束时间,志愿者人数及名单,
输出参加的比赛时间有重合的志愿者名字,按字母序输出
很朴素的想法,先把队伍映射成标号,然后vis区间标记它的开始时间和结束时间,如果发生冲突则放入set里面,
因为set本身就是按字典排序,因此最后直接输出就行。
*/
map<string, int> mp;//map 志愿者人名与人名编号的 映射
set<string> ans;//ans 志愿者人名答案 集合
int vis[maxn][N];// 志愿者人名在某段时间内是否存在的 二维数组
string name, contest;
int main()
{IO;
int t, n, v, sta, ed;// 开始、 结束时间
cin >> t;
while ( t-- )
{
mp.clear();
ans.clear();
memset(vis, 0, sizeof(vis) );
cin >> n;
int cnt = 0;
for(int i = 0; i < n; i++)
{
cin >> contest >> sta >> ed >> v;
for(int j = 0; j < v; j++)
{
cin >> name; // 输入志愿者名字
// 先用map 将字符串 与 标号 对应
if( !mp.count( name )) // 如果志愿者名字不存在mp中
mp[ name ] = ++cnt; //将name添加入mp中 并且从++cnt
//map.conut 返回1 或 0
//map.find 返回 地址 或 map.end()
// 再用 int& m 取map中的编号
// 字符串 整型编号 双边对应 进行枚举
int& m = mp[ name ]; // m 为 name 在 mp 中的地址 或者 int m 没关系
cout << m << ' ' << &m << ' ' << endl;
// int& &&&
for( int k = sta; k <= ed; k++) // 枚举k的时间变量 从sta到ed
{
if( vis[m][k] ) // 如果m这个人 在k的时间内已存在, 则冲突
ans.insert( name ); //将name插入到ans答案集合中
vis[m][k] = 1; // 把sta 到 ed 的时间区域全部置于 1 , 已访问
}
}
}
// 插入 set 中的元素已经按照 从小到大排好序了
cout << ans.size() <<endl;
for(set< string > :: iterator it = ans.begin(); it != ans.end(); it++)
cout << *it << endl;
}
}
/*不冲突的情况:
. .
. .
冲突的情况:
. .
. .
. .
. .
. .
. .
不冲突的情况少,
*/
阅读全文
0 0
- gym/101086 M Stairway to Heaven map set string、int对应 综合应用
- GYM 101086 M.ACPC Headquarters : AASTMT (Stairway to Heaven)(map)
- Gym 101086 M ACPC Headquarters : AASTMT (Stairway to Heaven)
- Stairway To Heaven
- ACPC Headquarters : AASTMT (Stairway to Heaven)
- list、set、map集合的综合应用
- Spring 普通属性注入(int ,String, List, Map, Set, String[])
- map与set的简单综合应用,统计单词词频
- 还是,Stairway To Haven
- 综合使用map和set
- c++ map set综合运用
- map<string,int>
- String 转Map set
- map< string,set<lin_no> >
- STL Set的综合应用
- haut 1270 谍报分析 河南省第十届省赛题(set加map的综合应用)
- Spring整理 --String int List Set Map Array 普通属性注入 属性编辑器
- Spring review--常用属性String、int、list、set、Map的注入
- hibernate-1-基本配置
- python中模块名字和__name__属性
- 白盒测试工具
- win10 Cmake编译 深入理解Opencv 源码
- SVN报错:Previous operation has not finished; run 'cleanup' if it was interrupted
- gym/101086 M Stairway to Heaven map set string、int对应 综合应用
- HDU 1166 敌兵布阵
- [U-Boot] [PATCH v5 29/30] zynq: Enable CONFIG_DEFAULT_DEVICE_TREE
- Java面向对象之继承
- Dagger2的基本配置
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) 831C. Jury Marks【二分】【水题】
- python 学习笔记 os模块
- 记事本 BOM 之 “联通” "联" “联想” 为什么有的显示不正常
- C/C++动态内存管理