题目描述
给定当前日期,以及小爱最近的行程,给定当前所有中高风险地区城市名字及风险等级,请生成小爱的行程码。具体说明如下:
- 城市名称是由小写英文字母组成的字符串,不含大写字母、数字或其他字符;
- 一部分城市为中高风险城市。风险等级分为高风险(以
H
表示)或中风险(以M
表示); - 输入数据只给出中高风险城市,其余城市均默认为低风险;
- 行程中的时间由月份与日期组成,中间以
-
号链接,如02-29
表示2月29日,所有时间均在2020年。输入数据保证不会出现不合理的日期,月份和日期均为两位数字,若不足两位,首位以0
补全。 - 行程是由时间和城市名称组成的,表示在给定的时间,小爱在给定的城市活动。
生成行程码的要求如下:
- 行程码只关心小爱在当前日期前 1414 天内的行程。 1414 天内的含义是指若两个日期之差小于或等于 1414 天。
- 行程码按绿、黄、红三色区分风险等级:
- 若 1414 天内有高风险地区行程,显示红码(以
Red
表示); - 否则,若 1414 天内有中风险地区行程,显示黄码(以
Yellow
表示); - 否则,说明小爱没有中高风险地区行程,显示绿码(以
Green
表示)。
- 若 1414 天内有高风险地区行程,显示红码(以
- 行程码还应列举出当前日期前 1414 天内访问过的所有城市:
- 最近访问的城市应优先输出;
- 若需要输出多个城市,以
,
隔开城市名; - 若城市为中高风险,则城市名后应添加
(M)
或(H)
标识。 - 若访问同一个城市多次,则只输出与当前日期最近的一次。
输入
第一行:单个正整数 �n,表示中有 �n 个城市为中高风险城市。
接下来 �n 行:每行有一个城市名称及一个字符,由空格隔开,表示该城市的风险等级,保证不会有两行的城市名称相同;
接下来一行:单个正整数 �m,表示行程数量。
接下来 �m 行:每行表示一条行程,由月份、日期及城市名称组成。
最后一行:一个日期,表示当前日期。
输出
第一行:一个字符串,表示行程码的颜色(为 Green
、Yellow
、Red
中的一种);
第二行:一个字符串,表示小爱最近的行程记录。
样例输入
3
berlin M
london M
newyork H
6
11-30 guangzhou
12-03 ningbo
12-04 hangzhou
12-05 shanghai
12-08 london
12-11 shanghai
12-17
样例输出
Yellow
shanghai,london(M),hangzhou,ningbo
#include<bits/stdc++.h>
using namespace std;
struct walk{
int month,day,last;
string city;
}a[1001],now;
struct h{
int rank;
string city;
char risk;
}l[101];
string vis[101];
int n,m,id,month[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>l[i].city>>l[i].risk;
if(l[i].risk=='M') l[i].rank=1;
if(l[i].risk=='H') l[i].rank=2;
}
cin>>m;
for(int i=1;i<=m;i++){
scanf("%d-%d",&a[i].month,&a[i].day);
cin>>a[i].city;
}
scanf("%d-%d",&now.month,&now.day);
for(int i=1;i<=m;i++){
if(a[i].month==now.month){
a[i].last=now.day-a[i].day;
}else if(a[i].month==now.month-1){
a[i].last=now.day+month[a[i].month]-a[i].day;
}else{
a[i].last=500;
}
}
int color=0;
for(int i=m;i>=1;i--){
if(a[i].last<=14){
for(int j=1;j<=n;j++){
if(a[i].city==l[j].city&&l[j].rank>color){
color=l[j].rank;
}
}
}
}
if(color==0) cout<<"Green"<<endl;
if(color==1) cout<<"Yellow"<<endl;
if(color==2) cout<<"Red"<<endl;
for(int i=m;i>=1;i--){
int flag=0;
if(a[i].last<=14){
for(int j=1;j<=id;j++){
if(a[i].city==vis[j]) flag=1;
}
if(flag) continue;
else vis[++id]=a[i].city;
if(i==m) cout<<a[i].city;
if(i<m) cout<<","<<a[i].city;
for(int j=1;j<=n;j++){
if(a[i].city==l[j].city){
cout<<"("<<l[j].risk<<")";
}
}
}
}
return 0;
}