MGJ3. 聊天
描述
A和B是好友,他们经常在空闲时间聊天,A的空闲时间为[a1 ,b1 ],[a2 ,b2 ]..[ap ,bp ]。B的空闲时间是[c1 +t,d1 +t]..[cq +t,dq +t],这里t为B的起床时间。这些时间包括了边界点。B的起床时间为[l,r]的一个时刻。若一个起床时间能使两人在任一时刻聊天,那么这个时间就是合适的,问有多少个合适的起床时间?输入描述
第一行数据四个整数:p,q,l,r(1≤p,q≤50,0≤l≤r≤1000)。接下来p行数据每一行有一对整数ai,bi(0≤ai输出描述
输出答案个数示例1
输入:
2 3 0 20 15 17 23 26 1 4 7 11 15 17
输出:
20
C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2019-03-20
/*聊天时间重叠*/ #include<stdio.h> #define MAX 101 typedef struct Time{ int first; int second; }Time; int p,q,l,r; Time a_t[MAX]; Time b_t[MAX]; int isOK(int t){ int i,j; for(i=0;i<p;i++){ for(j=0;j<q;j++){ if(b_t[j].first+t<=a_t[i].second&&b_t[j].second+t>=a_t[i].first){ return 1; } } } return 0; } int sum; void slove(){ int i; for(i=l;i<=r;i++){ if(isOK(i)){ sum++; } } } int main(){ while(scanf("%d %d %d %d",&p,&q,&l,&r)!=EOF){ int i,j; for(i=0;i<p;i++) scanf("%d %d",&a_t[i].first,&a_t[i].second); for(j=0;j<q;j++) scanf("%d %d",&b_t[j].first,&b_t[j].second); sum=0; slove(); printf("%d\n",sum); } }
C++ 解法, 执行用时: 2ms, 内存消耗: 384KB, 提交时间: 2021-05-04
#include <iostream> #include <vector> using namespace std; int main() { int p, q, l , r; while (cin>>p>>q>>l>>r) { vector<int> v1(2 * p, 0); for (int i = 0; i < p; ++i) { cin>>v1[2 * i]>>v1[2 * i + 1]; } vector<int> v2(2 * q, 0); for (int i = 0; i < q; ++i) { cin>>v2[2 * i]>>v2[2 * i + 1]; v2[2 * i] += l; v2[2 * i + 1] += l; } int res = 0; for (int k = 0; k <= r - l; ++k) { if (k != 0) { for (int i = 0; i < 2 * q; ++i) v2[i] += 1; } int bg = 0, pos = 0; while ((bg < v1.size()) && (pos < v2.size())) { int left = v1[bg], right = v1[bg + 1]; if (v2[pos] < left) pos += 1; else if (v2[pos] >= left && v2[pos] <= right) { res += 1; break; } else { bg += 2; } } } cout<<res<<endl; } return 0; }
C++14 解法, 执行用时: 2ms, 内存消耗: 480KB, 提交时间: 2020-09-07
#include<bits/stdc++.h> using namespace std; int main() { int p,q,l,r; while(cin>>p>>q>>l>>r){ vector<pair<int,int> > arr(p); vector<pair<int,int> > brr(q); for(int i=0;i<p;i++){ int x,y; cin>>x>>y; arr[i].first=x; arr[i].second=y; } for(int j=0;j<q;j++){ int x,y; cin>>x>>y; brr[j].first=x; brr[j].second=y; } int ans=0; int i,j; for(int x=l;x<=r;x++){ for(i=0;i<p;i++){ for(j=0;j<q;j++){ if(arr[i].first<=brr[j].second+x){ if(arr[i].second>=brr[j].first+x){ ans++; break; } } } if(j<q) break; } } cout<<ans<<endl; } return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 580KB, 提交时间: 2020-08-17
#include<iostream> using namespace std; #include<vector> int func(vector<int>& m1, vector<int>& n1, int& a, int& b) { int num = 0; for (int t = a; t <= b; t++) for (int i = 0; i < n1.size(); i++) { int cnt = 0; for (int j = 0; j < m1.size(); j = j + 2) { if ((n1[i] + t >= m1[j]) && (n1[i] + t <= m1[j + 1])) { cnt++; break; } } if (cnt== 1) { num++; // cout << t << " "; break; } } return num; } int main() { int m, n, p, q; vector<int>v1, v2; while(cin>>m>>n>>p>>q) { while (m--) { int x, y; cin >> x >> y; v1.push_back(x); v1.push_back(y); } while (n--) { int x, y; cin >> x >> y; v2.push_back(x); v2.push_back(y); } int out = func(v1, v2, p, q); // cout << endl; cout << out << endl; } system("pause"); return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 632KB, 提交时间: 2020-10-31
#include<iostream> using namespace std; #include<vector> int func(vector<int>& m1, vector<int>& n1, int& a, int& b) { int num = 0; for (int t = a; t <= b; t++) for (int i = 0; i < n1.size(); i++) { int cnt = 0; for (int j = 0; j < m1.size(); j = j + 2) { if ((n1[i] + t >= m1[j]) && (n1[i] + t <= m1[j + 1])) { cnt++; break; } } if (cnt== 1) { num++; // cout << t << " "; break; } } return num; } int main() { int m, n, p, q; vector<int>v1, v2; while(cin>>m>>n>>p>>q) { while (m--) { int x, y; cin >> x >> y; v1.push_back(x); v1.push_back(y); } while (n--) { int x, y; cin >> x >> y; v2.push_back(x); v2.push_back(y); } int out = func(v1, v2, p, q); // cout << endl; cout << out << endl; } system("pause"); return 0; }