CSP 201809-2 买菜
思路: 将甲的每个时间端的开始时间存到数组里面,再利用二分查找乙和甲的重叠时间,就是结果…
代码:
#include<bits/stdc++.h>
#define repn(n) for(int i=1;i<=n;i++)
#define rep(n) for(int i=0;i<n;i++)
#define pb push_back
#define ll long long
using namespace std;
vector<int> vis;
bool fnd(int x)
{
int h=vis.size()-1,l=0;
while(l<=h)
{
int mid=(l+h)/2;
if(vis[mid]==x)
return true;
else if(vis[mid]<x)
l=mid+1;
else
h=mid-1;
}
return false;
}
void getnum(int n)
{
int x,y;
repn(n)
{
cin>>x>>y;
for(int j=x;j<y;j++)
vis.pb(j);
}
}
int getscore(int n)
{
int x,y;
int ans=0;
repn(n)
{
cin>>x>>y;
for(int j=x;j<y;j++)
{
if(fnd(j))
ans++;
}
}
return ans;
}
int main()
{
int n;
cin>>n;
getnum(n);/
int res=getscore(n);
cout<<res<<endl;
return 0;
}