Problem:
B: Cram School Schedule / 塾の時間割
物語
あなたは塾の経営者である．あなたの塾は個人授業制で1人の生徒と1人の先生で授業を行う．この塾の先生は非常に優秀で科目にかかわらずすべての授業を行うことができる．また，先生と生徒は非常にタフなので，出席できる授業には他の授業の出席状況にかかわらず，すべて出席することが可能である．例えば，同じ時間帯の授業に出席できる2人の生徒と4人の先生がいる場合は，その時間帯に2つの授業を行える．
あなたは来月の授業予定を立てなくてはいけないが，先生と生徒の人数が多いため予定を立てるのが非常に大変である．また，あなたはできるだけ多くの授業を行いたいと考えている．そのため，あなたは行える最大の授業数を求めるプログラムを作ることにした．
問題
先生の人数と，生徒の人数，それぞれの先生と生徒の予定がない時間帯，授業を行える時間帯が与えられる．それぞれの先生，または生徒について，予定がない時間帯が授業を行える時間帯を完全に被覆しているとき，その先生，または生徒はその授業に出席できる．それぞれの授業を行える時間帯では，出席できる先生と生徒からなるペアを複数作り，作ったペアの数だけの授業を同時に行うことができる．このときに行える最大の授業数を求めよ．
入力形式
入力データの形式は以下のように与えられる．
授業が行える時間帯の情報
n
先生
1
の時間帯の情報
...
 先生
n
の時間帯の情報
m
生徒
1
の時間帯の情報
...
 生徒
m
の時間帯の情報
最初の1行には授業を行える時間帯の情報が与えられる．
続く1行には先生の人数
n
(
1 ≤ n ≤ 100
) が与えられる．続く
n
行の
i
行目には
i
番目の先生の予定がない時間帯の情報が与えられる．
続く1行には生徒の人数
m
(
1 ≤ m ≤ 100
) が与えられる．続く
m
行の
i
行目には
i
番目の生徒の予定がない時間帯の情報が与えられる．
各々の時間帯の情報は次の形式で与えられる．
k
ah_1
:
am_1
-
bh_1
:
bm_1
. . .
ah_k
:
am_k
-
bh_k
:
bm_k
はじめに時間帯の数
k
(
1 ≤ k ≤ 100
) が与えられ，空白区切りで
k
個の時間帯が与えられる．
i
番目の時間帯は
ah_i
:
am_i
-
bh_i
:
bm_i
の形式で与えられ，
ah_i
:
am_i
が開始時刻を表し，
bh_i
:
bm_i
が終了時刻を表す．
ah_i
,
am_i
,
bh_i
,
bm_i
はそれぞれ0詰め2桁で
0 ≤ ah_i, bh_i ≤ 23
,
0 ≤ am_i, bm_i ≤ 59
を満たす整数である．
与えられるすべての時間帯について，開始時刻は終了時刻より真に早い．また，それぞれの時間帯の情報において，時間帯は早い時刻順に並んでおり，どの終了時刻も1つ後の時間帯の開始時刻より真に早い．
出力形式
行える授業の最大数を1行で出力せよ．
入力例1
2 10:00-11:30 12:00-13:00
2
1 10:00-15:00
2 09:00-12:00 18:10-18:55
2
2 10:00-13:00 15:30-16:40
3 06:00-08:00 12:00-13:10 15:00-17:00
出力例1
2
1つ目の時間帯と2つ目の時間帯で1つずつ授業を行うことで，2回の授業を行うことができる．
入力例2
2 07:00-08:30 10:00-12:00
3
3 08:30-09:00 11:05-15:05 23:10-23:55
2 09:00-12:00 17:45-18:55
1 08:00-10:00
2
2 07:20-11:00 12:30-17:05
3 07:48-08:51 11:22-16:15 17:02-17:59
出力例2
0
予定がない時間帯で07:00からの授業に間に合う先生と生徒のペアが存在しないので1つ目の時間帯は授業を行うことができない．また，2つ目の時間帯は2人目の先生が出席できるが，生徒は誰も出席できない．よって，2つ目の時間帯も授業を行うことができない．したがって，行える最大の授業数は0である．

Submitted solutions:

code_snippet: #include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> mp;
ll inf =  1e9;


int main(){
 ll k;
 cin>>k;
 vector<mp> clas(k);
 for(ll i=0;i<k;i++){
  string s;
  cin>>s;
  int a=0,b=0;
  a = ( (s[0]-'0')*10+(s[1]-'0') )*60 + ( (s[3]-'0')*10+(s[4]-'0') );
  b = ( (s[6]-'0')*10+(s[7]-'0') )*60 + ( (s[9]-'0')*10+(s[10]-'0') );
  clas[i] = mp(a,b);
 }

 vector<ll> cntt(k,0);
 vector<ll> cnts(k,0);
 ll n;
 cin>>n;
 for(ll i=0;i<n;i++){
   ll t;
   cin>>t;
   for(ll j=0;j<t;j++){
    string s;
    cin>>s;
    int a=0,b=0;
    a = ( (s[0]-'0')*10+(s[1]-'0') )*60 + ( (s[3]-'0')*10+(s[4]-'0') );
    b = ( (s[6]-'0')*10+(s[7]-'0') )*60 + ( (s[9]-'0')*10+(s[10]-'0') );
    for(ll l=0;l<k;l++){
     if( a<= clas[l].first && clas[l].second <= b ) cntt[l]++;
    }
   }
 }

  n;
 cin>>n;
 for(ll i=0;i<n;i++){
   ll t;
   cin>>t;
   for(ll j=0;j<t;j++){
    string s;
    cin>>s;
    int a=0,b=0;
    a = ( (s[0]-'0')*10+(s[1]-'0') )*60 + ( (s[3]-'0')*10+(s[4]-'0') );
    b = ( (s[6]-'0')*10+(s[7]-'0') )*60 + ( (s[9]-'0')*10+(s[10]-'0') );
    for(ll l=0;l<k;l++){
     if( a<= clas[l].first && clas[l].second <= b ) cnts[l]++;
    }
   }
 }

 ll sum = 0;
 for(ll i=0;i<k;i++) sum += min( cntt[i] , cnts[i] );

cout<<sum<<endl;
 
 return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3216
final_rank: 16

code_snippet: #include<bits/stdc++.h>
using namespace std;

int main(){
  string temp;
  int temp2[3][110], temp3[3][110], temp4[3][110], zikantai[110] = {}, zikantai2[110] = {};
  int n, m, kkk, k, ans = 0;

  cin>>kkk;

  for(int i = 0; i < kkk; i++){
    cin>>temp;
    temp2[0][i] = temp[0] * 36000 + temp[1] * 3600  + temp[3] * 60 + temp[4];
    temp2[1][i] = temp[6] * 36000 + temp[7] * 3600  + temp[9] * 60 + temp[10];
  }

  cin>>n;
  for(int i = 0; i < n; i++){
    cin>>k;
    for(int j = 0; j < k; j++){
      cin>>temp;
      temp3[0][i] = temp[0] * 36000 + temp[1] * 3600  + temp[3] * 60 + temp[4];
      temp3[1][i] = temp[6] * 36000 + temp[7] * 3600  + temp[9] * 60 + temp[10];

      for(int l = 0; l < kkk; l++){
	if(temp3[0][i] <= temp2[0][l] && temp3[1][i] >= temp2[1][l]){
	  zikantai[l]++;
	}
      }
      
    }
  }
  
  cin>>m;
  for(int i = 0; i < m; i++){
    cin>>k;
    for(int j = 0; j < k; j++){
      cin>>temp;
      temp4[0][i] = temp[0] * 36000 + temp[1] * 3600  + temp[3] * 60 + temp[4];
      temp4[1][i] = temp[6] * 36000 + temp[7] * 3600  + temp[9] * 60 + temp[10];

      
      for(int l = 0; l < kkk; l++){
	 if(temp4[0][i] <= temp2[0][l] && temp4[1][i] >= temp2[1][l]){
	  zikantai2[l]++;
	}
      }
    }
  }


  for(int i = 0; i < kkk; i++){
    ans += min(zikantai[i], zikantai2[i]);
  }
  

  cout<<ans<<endl;
  
  return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3212
final_rank: 15

code_snippet: #include<bits/stdc++.h>
using namespace std;

int rec(string a,string b){
  string as,at,bs,bt;
  for(int i=0;i<a.size();i++){
    if(i<5){
      as+=a[i];
      bs+=b[i];
    }
    if(i>5){
      at+=a[i];
      bt+=b[i];
    }
  }
  if(bs<=as&&at<=bt)return 1;
  return 0;
}

int main(){
  int n,m;
  string l[100],t[100][100],s[100][100];
  int lc;
  int tc[100];
  int sc[100];
  cin>>lc;
  for(int i=0;i<lc;i++)cin>>l[i];
  cin>>n;
  for(int i=0;i<n;i++){
    cin>>tc[i];
    for(int j=0;j<tc[i];j++)cin>>t[i][j];
  }
  cin>>m;
  for(int i=0;i<m;i++){
    cin>>sc[i];
    for(int j=0;j<sc[i];j++)cin>>s[i][j];
  }
  int ans=0;
  for(int cn=0;cn<lc;cn++){
    int cntt=0,cnts=0;
    for(int i=0;i<n;i++){
      int f=1;
      for(int j=0;j<tc[i];j++){
	if(rec(l[cn],t[i][j])&&f){
	  cntt++;
	  f=0;
	}
      }
    }
    for(int i=0;i<m;i++){
      int f=1;
      for(int j=0;j<sc[i];j++){
	if(rec(l[cn],s[i][j])&&f){
	  cnts++;
	  f=0;
	}
      }
    }
    ans+=min(cnts,cntt);
  }
  cout<<ans<<endl;
  return 0;
}
accuracy: 1
time_ms: 1150
memory_kb: 4620
final_rank: 20

code_snippet: #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
P s2p(string s){
  return P(stoi(s.substr(0,2)),stoi(s.substr(3,2)));
}
bool contain(string c,string p){
  P stc=s2p(c.substr(0,5));
  P enc=s2p(c.substr(6,5));
  P stp=s2p(p.substr(0,5));
  P enp=s2p(p.substr(6,5));
  //cout<<stc.first<<" "<<stc.second<<endl;
  //cout<<enc.first<<" "<<enc.second<<endl;
  //cout<<stp.first<<" "<<stp.second<<endl;
  //cout<<enp.first<<" "<<enp.second<<endl;
  return stp<=stc&&enc<=enp;
}
int main(){
  int k,n,m;
  cin>>k;
  string c[k];
  for(int i=0;i<k;i++) cin>>c[i];
  cin>>n;
  vector<string> t[n];
  for(int i=0,j;i<n;i++){
    string tmp;
    cin>>j;
    for(int a=0;a<j;a++){
      cin>>tmp;
      t[i].push_back(tmp);
    }
  }
  cin>>m;
  vector<string> s[m];
  for(int i=0,j;i<m;i++){
    string tmp;
    cin>>j;
    for(int a=0;a<j;a++){
      cin>>tmp;
      s[i].push_back(tmp);
    }
  }
  int ans=0;
  for(int i=0;i<k;i++){
    int a=0,b=0;
    for(int l=0;l<n;l++){
      bool f=0;
      for(int j=0;j<(int)t[l].size();j++){
    f|=contain(c[i],t[l][j]);
      }
      if(f) a++;
    }
    for(int l=0;l<m;l++){
      bool f=0;
      for(int j=0;j<(int)s[l].size();j++){
    f|=contain(c[i],s[l][j]);
      }
      if(f) b++;
    }
    //cout<<a<<" "<<b<<endl;
    ans+=min(a,b);
  }
  cout<<ans<<endl;
  return 0;
}
accuracy: 1
time_ms: 1010
memory_kb: 4684
final_rank: 18

code_snippet: #include<bits/stdc++.h>
#define r(i,n) for(int i=0;i<n;i++)
using namespace std;
pair<int,int> a[101];
int c[101];
int main(){
  int n,sum=0;
cin>>n;

r(i,n){
  int q,w,e,r;
  scanf("%d:%d-%d:%d",&q,&w,&e,&r);
  a[i].first=q*60+w;
  a[i].second=e*60+r;
}
 int m;
 cin>>m;
 r(i,m){
   int p;cin>>p;
   r(j,p){
     int q,w,e,r;
     scanf("%d:%d-%d:%d",&q,&w,&e,&r);//cout<<q<<w<<e<<r<<endl;
     q=q*60+w;
     e=e*60+r;
     r(k,n)if(a[k].first>=q&&e>=a[k].second)c[k]++;
   }
 }
 cin>>m;
 r(i,m){
   int p;cin>>p;
   r(j,p){
     int q,w,e,r;
     scanf("%d:%d-%d:%d",&q,&w,&e,&r);
      q=q*60+w;
     e=e*60+r;
     r(k,n)if(a[k].first>=q&&e>=a[k].second&&c[k]){c[k]--;sum++;}
   }
 }
 cout<<sum<<endl;
}
accuracy: 1
time_ms: 10
memory_kb: 3200
final_rank: 14

code_snippet: #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
P s2p(string s){
  return P(stoi(s.substr(0,2)),stoi(s.substr(3,2)));
}
bool contain(string c,string p){
  P stc=s2p(c.substr(0,5));
  P enc=s2p(c.substr(6,5));
  P stp=s2p(p.substr(0,5));
  P enp=s2p(p.substr(6,5));
  //cout<<stc.first<<" "<<stc.second<<endl;
  //cout<<enc.first<<" "<<enc.second<<endl;
  //cout<<stp.first<<" "<<stp.second<<endl;
  //cout<<enp.first<<" "<<enp.second<<endl;
  return stp<=stc&&enc<=enp;
}
int main(){
  int k,n,m;
  cin>>k;
  string c[k];
  for(int i=0;i<k;i++) cin>>c[i];
  cin>>n;
  vector<string> t[n];
  for(int i=0,j;i<n;i++){
    string tmp;
    cin>>j;
    for(int a=0;a<j;a++){
      cin>>tmp;
      t[i].push_back(tmp);
    }
  }
  cin>>m;
  vector<string> s[m];
  for(int i=0,j;i<m;i++){
    string tmp;
    cin>>j;
    for(int a=0;a<j;a++){
      cin>>tmp;
      s[i].push_back(tmp);
    }
  }
  int ans=0;
  for(int i=0;i<k;i++){
    int a=0,b=0;
    for(int l=0;l<n;l++){
      bool f=0;
      for(int j=0;j<(int)t[l].size();j++){
	f|=contain(c[i],t[l][j]);
      }
      if(f) a++;
    }
    for(int l=0;l<m;l++){
      bool f=0;
      for(int j=0;j<(int)s[l].size();j++){
	f|=contain(c[i],s[l][j]);
      }
      if(f) b++;
    }
    //cout<<a<<" "<<b<<endl;
    ans+=min(a,b);
  }
  cout<<ans<<endl;
  return 0;
}
accuracy: 1
time_ms: 1050
memory_kb: 4648
final_rank: 19

code_snippet: #include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define rep(i,n) for(int (i)=0;(i)<(int)(n);++(i))
#define each(itr,c) for(__typeof(c.begin()) itr=c.begin(); itr!=c.end(); ++itr)
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define fi first
#define se second

struct Period
{
    // start, end
    int s,e;

    Period(){}

    Period(string x)
    {
        string a=x.substr(0,5), b=x.substr(6);
        s = convertToMinite(a);
        e = convertToMinite(b);
    }

    int convertToMinite(string x)
    {
        return 60*atoi(x.substr(0,2).c_str()) + atoi(x.substr(3).c_str());
    }

    bool cover(const Period& p)
    {
        return s<=p.s && p.e<=e;
    }
};

int main()
{
    cin.tie(0);ios::sync_with_stdio(false);

    int CLASS;
    cin >>CLASS;

    vector<Period> cl(CLASS);
    rep(i,CLASS)
    {
        string s;
        cin >>s;
        cl[i] = Period(s);
    }

    vector<int> teacher_available(CLASS,0), student_available(CLASS,0);

    int Q;

    // teacher
    cin >>Q;
    while(Q--)
    {
        int k;
        cin >>k;

        vector<int> a(CLASS,0);
        rep(i,k)
        {
            string s;
            cin >>s;
            Period p(s);

            rep(j,CLASS)
            {
                if(p.cover(cl[j])) a[j]=1;
            }
        }

        rep(i,CLASS) teacher_available[i] += a[i];
    }

    // student
    cin >>Q;
    while(Q--)
    {
        int k;
        cin >>k;

        vector<int> a(CLASS,0);
        rep(i,k)
        {
            string s;
            cin >>s;
            Period p(s);

            rep(j,CLASS)
            {
                if(p.cover(cl[j])) a[j]=1;
            }
        }

        rep(i,CLASS) student_available[i] += a[i];
    }

    int ans=0;
    rep(i,CLASS) ans+=min(teacher_available[i], student_available[i]);
    cout << ans << '\n';
    return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3192
final_rank: 13

code_snippet: //1????????????????????????1?????????????????????
//??????????????????????????¨?????§???????????????A???????????????B???????????°???min(A, B)???????¬????????????\??????
//????????????????????????
//????£????????????????????????°?????????????????§???????????§??????????????????
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;

struct DATABASE{
	vector<int> kougiS, kougiE;
	int n;
	vector<int> teacherS[100], teacherE[100];
	int m;
	vector<int> studentS[100], studentE[100];
}db;

void solve(){
	int i, j, k;
	int ans = 0;
	for( i = 0; i < db.kougiS.size(); i++ ){
		int s = db.kougiS[i];
		int e = db.kougiE[i];
		int teacherNum = 0, studentNum = 0;
		for( j = 0; j < db.n; j++ ){
			//j??????????????????i????????????????????§??????????????????
			for( k = 0; k < db.teacherS[j].size(); k++ ){
				if( db.teacherS[j][k] <= s && e <= db.teacherE[j][k] )
					break;
			}
			if( k < db.teacherS[j].size() ){
				teacherNum++; //????????§??????
			}
		}
		for( j = 0; j < db.m; j++ ){
			//j??????????????????i????????????????????§??????????????????
			for( k = 0; k < db.studentS[j].size(); k++ ){
				if( db.studentS[j][k] <= s && e <= db.studentE[j][k] )
					break;
			}
			if( k < db.studentS[j].size() ){
				studentNum++; //????????§??????
			}
		}
		ans += min(teacherNum, studentNum);
	}
	cout << ans << endl;
}

void input(){
	int i, j;
	int n, k;
	string s;
	
	cin >> k;
	for( i = 0; i < k; i++ ){
		cin >> s;
		int hs = (s[0] - '0') * 10 + (s[1] - '0');
		int ms = (s[3] - '0') * 10 + (s[4] - '0');
		int he = (s[6] - '0') * 10 + (s[7] - '0');
		int me = (s[9] - '0') * 10 + (s[10] - '0');
		db.kougiS.push_back(hs * 60 + ms);
		db.kougiE.push_back(he * 60 + me);
	}
	cin >> n;
	db.n = n;
	for( i = 0; i < n; i++ ){
		cin >> k;
		for( j = 0; j < k; j++ ){
			cin >> s;
			int hs = (s[0] - '0') * 10 + (s[1] - '0');
			int ms = (s[3] - '0') * 10 + (s[4] - '0');
			int he = (s[6] - '0') * 10 + (s[7] - '0');
			int me = (s[9] - '0') * 10 + (s[10] - '0');
			db.teacherS[i].push_back(hs * 60 + ms);
			db.teacherE[i].push_back(he * 60 + me);
		}
	}
	cin >> n;
	db.m = n;
	for( i = 0; i < n; i++ ){
		cin >> k;
		for( j = 0; j < k; j++ ){
			cin >> s;
			int hs = (s[0] - '0') * 10 + (s[1] - '0');
			int ms = (s[3] - '0') * 10 + (s[4] - '0');
			int he = (s[6] - '0') * 10 + (s[7] - '0');
			int me = (s[9] - '0') * 10 + (s[10] - '0');
			db.studentS[i].push_back(hs * 60 + ms);
			db.studentE[i].push_back(he * 60 + me);
		}
	}
}

int main()
{
	input();
	solve();
	return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 1436
final_rank: 11

code_snippet: /*
 * 2670.cc: Cram School Schedule
 */

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<deque>
#include<algorithm>
#include<numeric>
#include<utility>
#include<complex>
#include<functional>
 
using namespace std;

/* constant */

const int MAX_N = 100;
const int MAX_M = 100;

/* typedef */

typedef pair<int,int> pii;
typedef vector<pii> vpii;

/* global variables */

vpii cv, tvs[MAX_N], svs[MAX_M];

/* subroutines */

int hm2n(string &s) {
  int h = atoi(s.substr(0, 2).c_str());
  int m = atoi(s.substr(3, 5).c_str());
  return (h * 60 + m);
}

void read_times(vpii &v) {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    string ab;
    cin >> ab;
    string ai = ab.substr(0, 5), bi = ab.substr(6, 11);
    v.push_back(pii(hm2n(ai), hm2n(bi)));
  }
}

void print_vpii(vpii &v) {
  for (int i = 0; i < v.size(); i++)
    printf("(%d,%d)", v[i].first, v[i].second);
  putchar('\n');
}

bool cover(pii &c, vpii &v) {
  for (int i = 0; i < v.size(); i++)
    if (v[i].first <= c.first && c.second <= v[i].second) return true;
  return false;
}

/* main */

int main() {
  read_times(cv);
  //print_vpii(cv);

  int n;
  cin >> n;
  for (int i = 0; i < n; i++) read_times(tvs[i]);
  
  int m;
  cin >> m;
  for (int i = 0; i < m; i++) read_times(svs[i]);

  int sum = 0;
  for (int i = 0; i < cv.size(); i++) {
    int tn = 0, sn = 0;

    for (int j = 0; j < n; j++)
      if (cover(cv[i], tvs[j])) tn++;
    for (int j = 0; j < m; j++)
      if (cover(cv[i], svs[j])) sn++;
    //printf("tn=%d, sn=%d\n", tn, sn);

    sum += min(tn, sn);
  }

  printf("%d\n", sum);
  return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 1420
final_rank: 12

code_snippet: #include <bits/stdc++.h>
using namespace std;

typedef vector<int> vec;

int main() {
    int t; cin >> t;
    vec times(t), timee(t), count(t);
    for(int i = 0; i < t; i++) {
        int h1, m1, h2, m2;
        char c;
        cin >> h1 >> c >> m1 >> c >> h2 >> c >> m2;
        times[i] = h1 * 60 + m1;
        timee[i] = h2 * 60 + m2;
    }

    int n; cin >> n;
    for(int i = 0; i < n; i++) {
        int s; cin >> s;
        for(int k = 0; k < s; k++) {
            int h1, m1, h2, m2;
            char c;
            cin >> h1 >> c >> m1 >> c >> h2 >> c >> m2;
            int teachers = h1 * 60 + m1;
            int teachere = h2 * 60 + m2;
            for(int j = 0; j < t; j++) {
                if(teachers <= times[j] && timee[j] <= teachere) {
                    count[j]++;
                }
            }
        }
    }

    int m; cin >> m;
    int res = 0;
    for(int i = 0; i < m; i++) {
        int s; cin >> s;
        for(int k = 0; k < s; k++) {
            int h1, m1, h2, m2;
            char c;
            cin >> h1 >> c >> m1 >> c >> h2 >> c >> m2;
            int students = h1 * 60 + m1;
            int studente = h2 * 60 + m2;
            for(int j = 0; j < t; j++) {
                if(students <= times[j] && timee[j] <= studente) {
                    if(count[j]) res++, count[j]--;
                }
            }
        }
    }

    cout << res << endl;

    return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 1196
final_rank: 5

code_snippet: #include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;

bool check(P a,P b){
  return (a.first<=b.first&&b.second<=a.second);
}

int change(string str){
  int L=(str[0]-'0')*10+(str[1]-'0');
  int R=(str[3]-'0')*10+(str[4]-'0');
  return L*100+R;
}

vector<P> A,B;
vector<int> a[2];
int n,m;
string str;


int main(){
  cin>>n;
  A.resize(n);
  a[0].resize(n);
  a[1].resize(n);
  for(int i=0;i<n;i++){
    cin>>str;
    A[i].first=change( str.substr(0,5) );
    A[i].second=change( str.substr(6,5) );
  }

  for(int k=0;k<2;k++){
    int T;
    cin>>T;
    while(T--){
      cin>>m;
      B.clear();
      B.resize(m);
      for(int i=0;i<m;i++){
        cin>>str;
        B[i].first=change( str.substr(0,5) );
        B[i].second=change( str.substr(6,5) );
        for(int j=0;j<n;j++){
          if(check(B[i],A[j])){
            a[k][j]++;
          }
        }
      }
    }
  }

  int ans=0;
  for(int i=0;i<n;i++)
    ans+=min(a[0][i],a[1][i]);  
  cout<<ans<<endl;
  return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 1216
final_rank: 3

code_snippet: #include<bits/stdc++.h>
using namespace std;
typedef pair<int,int>P;

P get(){
    int a,b,c,d;
    scanf("%d:%d-%d:%d",&a,&b,&c,&d);
    return P(a*60+b,c*60+d);
}
vector<P>A;
vector<vector<P> >B,C;
int main(){
    int K,N,M;
    cin>>K;
    for(int i=0;i<K;i++)A.push_back(get());
    cin>>N;
    for(int i=0;i<N;i++){
        vector<P>b;
        int k;cin>>k;
        for(int j=0;j<k;j++)b.push_back(get());
        B.push_back(b);
    }
    cin>>M;
    for(int i=0;i<M;i++){
        vector<P>c;
        int k;cin>>k;
        for(int j=0;j<k;j++)c.push_back(get());
        C.push_back(c);
    }

    int ans=0;
    for(int i=0;i<K;i++){
        int a=0,b=0;

        for(int j=0;j<B.size();j++){
            bool flag=false;
            for(int k=0;k<B[j].size();k++){
                if(B[j][k].first<=A[i].first&&A[i].second<=B[j][k].second)flag=true;
            }
            if(flag)a++;
        }
        for(int j=0;j<C.size();j++){
            bool flag=false;
            for(int k=0;k<C[j].size();k++){
                if(C[j][k].first<=A[i].first&&A[i].second<=C[j][k].second)flag=true;
            }
            if(flag)b++;
        }
        ans+=min(a,b);
    }

    cout<<ans<<endl;
}
accuracy: 1
time_ms: 10
memory_kb: 1432
final_rank: 10

code_snippet: #include <cstdio>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <limits>
#include <climits>
#include <cfloat>
#include <functional>
using namespace std;

void readTime(vector<pair<string, string> >& t)
{
    int k;
    cin >> k;
    t.resize(k);
    for(int i=0; i<k; ++i){
        string s;
        cin >> s;
        t[i].first  = s.substr(0, 5);
        t[i].second = s.substr(6, 5);
    }
}

int main()
{
    vector<pair<string, string> > lesson;
    readTime(lesson);

    int k = lesson.size();
    vector<vector<int> > x(2, vector<int>(k));

    for(int a=0; a<2; ++a){
        int n;
        cin >> n;
        for(int i=0; i<n; ++i){
            vector<pair<string, string> > t;
            readTime(t);
            for(auto& p : t){
                for(int j=0; j<k; ++j){
                    if(p.first <= lesson[j].first && lesson[j].second <= p.second)
                        ++ x[a][j];
                }
            }
        }
    }

    int ans = 0;
    for(int i=0; i<k; ++i)
        ans += min(x[0][i], x[1][i]);
    cout << ans << endl;

    return 0;
}
accuracy: 1
time_ms: 40
memory_kb: 1256
final_rank: 7

code_snippet: #include<iostream>
#include<string>
#include<vector>
using namespace std;

string str,t;
vector<pair<int, int> >lec;
vector<vector<pair<int, int> > >stu,pro;
int n,m,k;

void ini(int x){
    cin>>n;
    for(int p=0;p<n;p++){
        cin>>str;
        int f=0,s=0;
        for(int i=0;i<4;i++){
            t=str.substr(i*2+i,2);
            if(i<2)
                for(int j=0;j<2;j++)
                    f=f*10+t[j]-'0';
            else
                for(int j=0;j<2;j++)
                    s=s*10+t[j]-'0';
        }
        if(x==0)lec.push_back(make_pair(f,s));
        if(x==1)pro[k].push_back(make_pair(f,s));
        if(x==2)stu[k].push_back(make_pair(f,s));
    }
}
void in(int x){
    cin>>m;
    if(x==1)pro.resize(m);
    else stu.resize(m);
    for(k=0;k<m;k++)
        ini(x);
}
int main(){
    ini(0);
    in(1);
    in(2);
    int ans=0;
    for(int i=0;i<lec.size();i++){
        int p=0,s=0;
        for(int j=0;j<pro.size();j++){
            for(int k=0;k<pro[j].size();k++){
                if(pro[j][k].first<=lec[i].first&&pro[j][k].second>=lec[i].second){
                    p++;
                }
            }
        }
    n1:;
        for(int j=0;j<stu.size();j++){
            for(int k=0;k<stu[j].size();k++){
                if(stu[j][k].first<=lec[i].first&&stu[j][k].second>=lec[i].second){
                    s++;
                }
            }
        }
        ans+=min(p,s);
    n2:;
    }
    cout<<ans<<endl;
}
accuracy: 1
time_ms: 10
memory_kb: 1416
final_rank: 9

code_snippet: #include<cstdio>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;

int main(){
  int n,m,k;

  scanf("%d",&k);
  vector< pair<int,int> > inv(k);
  for(int i=0;i<k;i++){
    int a,b,c,d;
    scanf("%d:%d-%d:%d",&a,&b,&c,&d);
    inv[i] = make_pair(a*60+b, c*60+d);
  }

  scanf("%d",&n);
  vector< vector< pair<int,int> > > t(n);
  for(int i=0;i<n;i++){
    int x;
    scanf("%d",&x);
    for(int j=0;j<x;j++){
      int a,b,c,d;
      scanf("%d:%d-%d:%d",&a,&b,&c,&d);
      t[i].push_back( make_pair(a*60+b, c*60+d) );
    }
  }

  scanf("%d",&m);
  vector< vector< pair<int,int> > > s(m);
  for(int i=0;i<m;i++){
    int x;
    scanf("%d",&x);
    for(int j=0;j<x;j++){
      int a,b,c,d;
      scanf("%d:%d-%d:%d",&a,&b,&c,&d);
      s[i].push_back( make_pair(a*60+b, c*60+d) );
    }
  }

  vector<int> tn(k,0), sn(k,0);

  for(int i=0;i<k;i++){
    for(int j=0;j<n;j++){
      bool f = false;
      for(pair<int,int> p : t[j]){
	if( p.first <= inv[i].first && inv[i].second <= p.second )f = true;
      }
      if(f)tn[i]++;
    }

    for(int j=0;j<m;j++){
      bool f = false;
      for(pair<int,int> p : s[j]){
	if( p.first <= inv[i].first && inv[i].second <= p.second )f = true;
      }
      if(f)sn[i]++;
    }
  }

  int ans = 0;
  for(int i=0;i<k;i++){
    ans += min(tn[i], sn[i]);
  }
  printf("%d\n",ans);
}
accuracy: 1
time_ms: 10
memory_kb: 1216
final_rank: 3

code_snippet: #include<stdio.h>
#include<algorithm>
using namespace std;
int d[110];
int e[110];
int L[110];
int R[110];
int main(){
	int a;
	scanf("%d",&a);
	for(int i=0;i<a;i++){
		int h,m;
		scanf("%d:%d-",&h,&m);
		L[i]=h*60+m;
		scanf("%d:%d",&h,&m);
		R[i]=h*60+m;
	}
	int b;scanf("%d",&b);
	for(int i=0;i<b;i++){	
		int p;scanf("%d",&p);
		while(p--){
			int h,m;
			scanf("%d:%d-",&h,&m);
			int left=h*60+m;
			scanf("%d:%d",&h,&m);
			int right=h*60+m;
			for(int j=0;j<a;j++){
				if(left<=L[j]&&R[j]<=right)d[j]++;
			}
		}
	}
	scanf("%d",&b);
	for(int i=0;i<b;i++){	
		int p;scanf("%d",&p);
		while(p--){
			int h,m;
			scanf("%d:%d-",&h,&m);
			int left=h*60+m;
			scanf("%d:%d",&h,&m);
			int right=h*60+m;
			for(int j=0;j<a;j++){
				if(left<=L[j]&&R[j]<=right)e[j]++;
			}
		}
	}
	int ret=0;
	for(int i=0;i<a;i++)ret+=min(d[i],e[i]);
	printf("%d\n",ret);
}
accuracy: 1
time_ms: 20
memory_kb: 1028
final_rank: 1

code_snippet: #include "bits/stdc++.h"
using namespace std;
#define REP(i,j) for(int i=0; i<j; ++i)

int L, n, m, N = 0, M = 0, c[100][2], t[10000][2], s[10000][2], k, ct, cs, a = 0;

void T(int &t1, int &t2){
    int h1, m1, h2, m2;
    scanf("%d:%d-%d:%d", &h1, &m1, &h2, &m2);
    t1 = h1 * 60 + m1;
    t2 = h2 * 60 + m2;
}

int main(){
    cin >> L;
    REP(i, L) T(c[i][0], c[i][1]);
    cin >> n;
    REP(i, n){
        cin >> k;
        REP(j, k)
            T(t[N][0], t[N][1]), ++N;
    }
    cin >> m;
    REP(i, m){
        cin >> k;
        REP(j, k)
            T(s[M][0], s[M][1]), ++M;
    }
    REP(i, L){
        ct = cs = 0;
        REP(j, N)
            if(t[j][0]<=c[i][0] && c[i][1]<=t[j][1]) ++ct;
        REP(j, M)
            if(s[j][0]<=c[i][0] && c[i][1]<=s[j][1]) ++cs;
        a += min(ct, cs);
    }
    cout << a << endl;
}
accuracy: 1
time_ms: 10
memory_kb: 1392
final_rank: 8

code_snippet: #include <iostream>
#include <cstdio>
#include <vector>

using namespace std;

vector<pair<int, int> > v;

vector<int> f(int n){
	vector<int> vv(v.size());
	for(int i=0; i< n; i++){
		int m;
		cin >> m;
		for(int k=0; k < m; k++){
			int a, b, c, d;
			scanf("%d:%d-%d:%d", &a, &b, &c, &d);
			a = a*100+b; c = c*100+d;
			for(int j=0; j< v.size(); j++){
				if(a <= v[j].first && v[j].second <= c) vv[j]++;
			}
		}
	}
	return vv;
}

int main(){
	int p;
	cin >> p;
	for(int i=0; i < p; i++){
		int a, b, c, d;
		scanf("%d:%d-%d:%d", &a, &b, &c, &d);
		a = a*100+b; c = c*100+d;
		v.push_back(make_pair(a, c));
	}
	int n, m;
	cin >> n;
	vector<int> a = f(n);
	cin >> m;
	vector<int> b = f(m);

	int ret = 0;
	for(int i=0; i< a.size(); i++){
		ret += min(a[i], b[i]);
	}
	cout << ret << endl;
}
accuracy: 1
time_ms: 10
memory_kb: 1244
final_rank: 6

code_snippet: #include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;

pair<int, int> next_time() {
	int sh, sm, eh, em;
	scanf("%d:%d-%d:%d", &sh, &sm, &eh, &em);
	return make_pair(sh * 60 + sm, eh * 60 + em);
}

vector<pair<int, int>> input_schedule() {
	int n;
	scanf("%d", &n);
	vector<pair<int, int>> res(n);
	for(auto &e : res) e = next_time();
	return res;
}

bool contain(const pair<int, int> &a, const pair<int, int> &b) {
	return a.first <= b.first && b.second <= a.second;
}

int main() {
	const auto classes = input_schedule();

	int n;
	scanf("%d", &n);
	vector<vector<pair<int, int>>> students(n);
	for(auto &e : students) e = input_schedule();

	int m;
	scanf("%d", &m);
	vector<vector<pair<int, int>>> teachers(m);
	for(auto &e : teachers) e = input_schedule();

	int res = 0;
	for(const auto &c : classes) {
		int cnt = 0;
		for(const auto &s : students) {
			for(const auto &e : s) {
				if(contain(e, c)) {
					++cnt;
				}
			}
		}

		for(const auto &t : teachers) {
			for(const auto &e : t) {
				if(cnt && contain(e, c)) {
					++res;
					--cnt;
				}
			}
		}
	}

	printf("%d\n", res);

	return EXIT_SUCCESS;
}
accuracy: 1
time_ms: 10
memory_kb: 1168
final_rank: 2

code_snippet: #include<bits/stdc++.h>

#define REP(i,s,n) for(int i=s;i<n;i++)
#define rep(i,n) REP(i,0,n)

using namespace std;

typedef pair<string,string> string2;
vector<string2> classInfo;
vector<string2> teacher[110],student[110];
int numTeacher,numStudent;

string2 split(string s){
  string2 ret;
  s[5] = ' ';
  stringstream ss;
  ss << s;
  ss >> ret.first >> ret.second;
  return ret;
}

int main(){
 string s;
  int n;
  cin >> n;
  rep(i,n) {
    cin >> s;
    classInfo.push_back(split(s));
  }
  cin >> numTeacher;
  rep(i,numTeacher) {
    cin >> n;
    rep(j,n) {
      cin >> s;
      teacher[i].push_back(split(s));
    }
  }

  cin >> numStudent;
  rep(i,numStudent) {
    cin >> n;
    rep(j,n) {
      cin >> s;
      student[i].push_back(split(s));
    }
  }

  int maxi = 0;
  rep(i,classInfo.size()){
    int enableTeacher = 0, enableStudent = 0;
    rep(j,numTeacher) {
      bool enable = false;
      rep(k,teacher[j].size()) if( teacher[j][k].first <= classInfo[i].first && classInfo[i].second <= teacher[j][k].second ) { enable = true; break; }
      if( enable ) { ++enableTeacher; }
    }
    rep(j,numStudent) {
      bool enable = false;
      rep(k,student[j].size()) if( student[j][k].first <= classInfo[i].first && classInfo[i].second <= student[j][k].second ) { enable = true; break; }
      if( enable ) { ++enableStudent; }
    }
    maxi += min(enableTeacher,enableStudent);
  }
  cout << maxi << endl;

  return 0;
}
accuracy: 1
time_ms: 40
memory_kb: 3548
final_rank: 17