#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
map< string,int > id;
vector< int > arr[ 100000 ] ;
class Solution{
public :
vector< string> alertNames( vector< string> & keyName, vector< string> & keyTime) {
int node = 0 ;
int i;
int j;
int k;
vector< string> res;
id.clear ( ) ;
for ( i= ( 0 ) ; i< ( keyName.size ( ) ) ; i++ ) {
if ( id.count ( keyName[ i] ) == 0 ) {
id[ keyName[ i] ] = node;
arr[ node] .clear ( ) ;
node++ ;
}
j = id[ keyName[ i] ] ;
k = atoi ( keyTime[ i] .c_str ( ) ) * 60 + atoi ( keyTime[ i] .c_str ( ) + 3 ) ;
arr[ j] .push_back ( k) ;
}
for ( auto p : id) {
i = p.second ;
if ( arr[ i] .size ( ) < 3 ) {
continue ;
}
sort( arr[ i] .begin ( ) , arr[ i] .end ( ) ) ;
for ( j= ( 2 ) ; j< ( arr[ i] .size ( ) ) ; j++ ) {
if ( arr[ i] [ j] - arr[ i] [ j- 2 ] <= 60 ) {
res.push_back ( p.first ) ;
break ;
}
}
}
sort( res.begin ( ) , res.end ( ) ) ;
return res;
}
}
;
// cLay version 20201121-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// map<string,int> id;
// vector<int> arr[1d5];
//
// class Solution {
// public:
// vector<string> alertNames(vector<string>& keyName, vector<string>& keyTime) {
// int node = 0, i, j, k;
// vector<string> res;
//
// id.clear();
// rep(i,keyName.size()){
// if(id.count(keyName[i])==0){
// id[keyName[i]] = node;
// arr[node].clear();
// node++;
// }
// j = id[keyName[i]];
// k = atoi(keyTime[i].c_str()) * 60 + atoi(keyTime[i].c_str() + 3);
// arr[j].push_back(k);
// }
//
// for(auto p : id){
// i = p.second;
// if(arr[i].size() < 3) continue;
// sort(arr[i].begin(), arr[i].end());
// rep(j,2,arr[i].size()) if(arr[i][j] - arr[i][j-2] <= 60){
// res.push_back(p.first);
// break;
// }
// }
//
// sort(res.begin(), res.end());
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KbWFwPHN0cmluZyxpbnQ+IGlkOwp2ZWN0b3I8aW50PiBhcnJbMTAwMDAwXTsKY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIHZlY3RvcjxzdHJpbmc+IGFsZXJ0TmFtZXModmVjdG9yPHN0cmluZz4mIGtleU5hbWUsIHZlY3RvcjxzdHJpbmc+JiBrZXlUaW1lKXsKICAgIGludCBub2RlID0gMDsKICAgIGludCBpOwogICAgaW50IGo7CiAgICBpbnQgazsKICAgIHZlY3RvcjxzdHJpbmc+IHJlczsKICAgIGlkLmNsZWFyKCk7CiAgICBmb3IoaT0oMCk7aTwoa2V5TmFtZS5zaXplKCkpO2krKyl7CiAgICAgIGlmKGlkLmNvdW50KGtleU5hbWVbaV0pPT0wKXsKICAgICAgICBpZFtrZXlOYW1lW2ldXSA9IG5vZGU7CiAgICAgICAgYXJyW25vZGVdLmNsZWFyKCk7CiAgICAgICAgbm9kZSsrOwogICAgICB9CiAgICAgIGogPSBpZFtrZXlOYW1lW2ldXTsKICAgICAgayA9IGF0b2koa2V5VGltZVtpXS5jX3N0cigpKSAqIDYwICsgYXRvaShrZXlUaW1lW2ldLmNfc3RyKCkgKyAzKTsKICAgICAgYXJyW2pdLnB1c2hfYmFjayhrKTsKICAgIH0KICAgIGZvcihhdXRvIHAgOiBpZCl7CiAgICAgIGkgPSBwLnNlY29uZDsKICAgICAgaWYoYXJyW2ldLnNpemUoKSA8IDMpewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHNvcnQoYXJyW2ldLmJlZ2luKCksIGFycltpXS5lbmQoKSk7CiAgICAgIGZvcihqPSgyKTtqPChhcnJbaV0uc2l6ZSgpKTtqKyspewogICAgICAgIGlmKGFycltpXVtqXSAtIGFycltpXVtqLTJdIDw9IDYwKXsKICAgICAgICAgIHJlcy5wdXNoX2JhY2socC5maXJzdCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHNvcnQocmVzLmJlZ2luKCksIHJlcy5lbmQoKSk7CiAgICByZXR1cm4gcmVzOwogIH0KfQo7Ci8vIGNMYXkgdmVyc2lvbiAyMDIwMTEyMS0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIG1hcDxzdHJpbmcsaW50PiBpZDsKLy8gdmVjdG9yPGludD4gYXJyWzFkNV07Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICB2ZWN0b3I8c3RyaW5nPiBhbGVydE5hbWVzKHZlY3RvcjxzdHJpbmc+JiBrZXlOYW1lLCB2ZWN0b3I8c3RyaW5nPiYga2V5VGltZSkgewovLyAgICAgaW50IG5vZGUgPSAwLCBpLCBqLCBrOwovLyAgICAgdmVjdG9yPHN0cmluZz4gcmVzOwovLyAKLy8gICAgIGlkLmNsZWFyKCk7Ci8vICAgICByZXAoaSxrZXlOYW1lLnNpemUoKSl7Ci8vICAgICAgIGlmKGlkLmNvdW50KGtleU5hbWVbaV0pPT0wKXsKLy8gICAgICAgICBpZFtrZXlOYW1lW2ldXSA9IG5vZGU7Ci8vICAgICAgICAgYXJyW25vZGVdLmNsZWFyKCk7Ci8vICAgICAgICAgbm9kZSsrOwovLyAgICAgICB9Ci8vICAgICAgIGogPSBpZFtrZXlOYW1lW2ldXTsKLy8gICAgICAgayA9IGF0b2koa2V5VGltZVtpXS5jX3N0cigpKSAqIDYwICsgYXRvaShrZXlUaW1lW2ldLmNfc3RyKCkgKyAzKTsKLy8gICAgICAgYXJyW2pdLnB1c2hfYmFjayhrKTsKLy8gICAgIH0KLy8gCi8vICAgICBmb3IoYXV0byBwIDogaWQpewovLyAgICAgICBpID0gcC5zZWNvbmQ7Ci8vICAgICAgIGlmKGFycltpXS5zaXplKCkgPCAzKSBjb250aW51ZTsKLy8gICAgICAgc29ydChhcnJbaV0uYmVnaW4oKSwgYXJyW2ldLmVuZCgpKTsKLy8gICAgICAgcmVwKGosMixhcnJbaV0uc2l6ZSgpKSBpZihhcnJbaV1bal0gLSBhcnJbaV1bai0yXSA8PSA2MCl7Ci8vICAgICAgICAgcmVzLnB1c2hfYmFjayhwLmZpcnN0KTsKLy8gICAgICAgICBicmVhazsKLy8gICAgICAgfQovLyAgICAgfQovLyAKLy8gICAgIHNvcnQocmVzLmJlZ2luKCksIHJlcy5lbmQoKSk7Ci8vICAgICByZXR1cm4gcmVzOwovLyAgIH0KLy8gfTsK