zoukankan      html  css  js  c++  java
  • 【解题报告】 防线

    【解题报告】 防线

    题目:防线

    解题思路:

    虽然说是解题报告,但是也是有一部分曲折在其中的,因为这道题开始的时候实在想不到思路,知道看到了某大佬的题解之后才豁然开朗,明白了这道题目的做法,和神奇的思想

    这道题的思想很简单,就是用前缀和

    你要想,奇数加奇数等于偶数,但是题目中只有一个是奇数的,所以这种情况不成立,那么就只有偶数加奇数或偶数加偶数两种情况

    因此我们就做一个前缀和加上一个神奇而又简单的二分,就可以得出正确而又完美有缺的答案了(有缺我也不知道那里缺)

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int maxn=200005;
    int n,t;
    struct ar
    {
    	long long s;
    	long long e;
    	long long d;
    }a[maxn];
    long long judge(long long x)
    {
    	long long ans=0;
    	for(int i=1;i<=n;i++)
    	{
    		if(a[i].s<=x)
    		ans+=(min(x,a[i].e)-a[i].s)/a[i].d+1;
    	}
    	return ans;
    }
    int main()
    {
    	cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		for(int i=1;i<=n;i++)
    		cin>>a[i].s>>a[i].e>>a[i].d;
    		long long l=0,r=((long long)1<<31)-1;
    		while(l<r)
    		{
    			long long mid=(l+r)/2;
    			if(!(judge(mid)&1))//如果这个min之前的是偶数 
    			l=mid+1;
    			else
    			r=mid;
    		}
    		int ans=judge(r)-judge(r-1);
    		if(ans)
    		cout<<l<<" "<<ans<<endl;
    		else
    		cout<<"There's no weakness."<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    redis相关问题
    redis的持久化功能
    redis运维常用的server端命令
    Redis运维时需要注意的参数
    redis模拟消息订阅
    redis设置密码
    redis简单的事务
    Redis的配置文件详解
    Linux中安装redis的phpredis扩展
    css动画属性--小球移动
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/11403235.html
Copyright © 2011-2022 走看看