首页 > 代码库 > LA3905 流星(Meteor)
LA3905 流星(Meteor)
很麻烦的一个题,有很多的技巧可以学到
#include <set>#include <cstdio>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;const int maxn = 100005;const int INF = 0x3fffffff;const int k = 2520;//lcm(1,2,..,10);int w,h;struct node{ int pos; int dir; friend bool operator <(node a,node b) { if(a.pos==b.pos)return a.dir>b.dir; return a.pos<b.pos; }}e[maxn*2];void solve(int x,int a,int w,int &l,int &r){ if(a==0){ if(x<=0 || x>=w)r = l-1; } else if(a>0){ l = max(l,-x/a); r = min(r,(w-x)/a); } else { l = max(l,(w-x)/a); r = min(r,-x/a); }}int main(){// freopen("in.txt","r",stdin); int T;scanf("%d",&T); while(T--) { int n;scanf("%d%d%d",&w,&h,&n); w*=k;h*=k; int cnt = 0; for(int i = 1;i<=n;++i) { int x,y,a,b; scanf("%d%d%d%d",&x,&y,&a,&b); int l = 0,r = INF; solve(x*k,a,w,l,r); solve(y*k,b,h,l,r); if(r<=l)continue; e[cnt++] = (node){l,0}; e[cnt++] = (node){r,1}; } sort(e,e+cnt); int ans = 0,t = 0; for(int i = 0;i<cnt;++i) { if(e[i].dir)t--; else t++; ans = max(ans,t); } printf("%d\n",ans); } return 0;}
LA3905 流星(Meteor)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。