zoukankan      html  css  js  c++  java
  • CF989 Solution

    题目链接

    题解

    下图横坐标为位置,纵坐标为时间。

    如果将风看作月亮在移动而非云在移动,月亮可以到达黄色的区域。如果两朵云的相交处与黄色区域有交集则可以遮住月亮,易得仅需判断上端的顶点即可。设(v_i=1,v_j=-1),则云(i,j)相交处上端的顶点坐标为((frac{|x_j+l+x_i|}{2},frac{x_j+l-x_i}{2}))。而(y>frac{x}{w})的点在黄色区域内,因此需要满足(w(x_j+l-x_i)>|x_j+l+x_i|)。可以发现固定(x_i)(x_j)越大越容易满足。因此将(v=1)(-1)的云分别增序排序,设(j)为当前不满足上述不等式的最大的(j),双指针即可。

    AC代码

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N=1e5+10;
    int x1[N],x2[N],n1,n2;
    signed main()
    {
    	int n,l,w,x,v;
    	scanf("%lld%lld%lld",&n,&l,&w);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%lld%lld",&x,&v);
    		if(v>0) x1[++n1]=x;
    		else x2[++n2]=x;
    	}
    	sort(x1+1,x1+n1+1),sort(x2+1,x2+n2+1);
    	int ans=0,j=1;
    	for(int i=1;i<=n1;i++)
    	{
    		while(j<=n2 && abs(x1[i]+x2[j]+l)>=w*(x2[j]+l-x1[i])) j++;
    		ans+=n2-j+1;
    	}
    	printf("%lld",ans);
    	return 0;
    }
    
  • 相关阅读:
    Java 框架
    GridView1 footer求和
    常用CSS
    吉日分页转载
    强制刷新
    常用的CDN 链接 http://cdn.code.baidu.com/ http://www.bootcdn.cn/
    1、C#中Hashtable、Dictionary详解以及写入和读取对比
    webservice 交错数组
    vs plug
    DataReader方式 获取数据
  • 原文地址:https://www.cnblogs.com/violetholmes/p/15152143.html
Copyright © 2011-2022 走看看