题目链接:点击查看

题目大意:假设现在有一个数轴,一共有n组防具,每组防具给出的形式为S,D,E,在数轴上的分布为:S,S+D,S+2D....S+KD,保证S+KD<=E

现在规定数轴上某个点有偶数个防具是稳定的,有奇数个防具是不稳定的,0因为也是偶数,所以0也是稳定的,题目保证数轴上最多有一个不稳定的点,现在问这个不稳定点的位置,以及有多少个防具

题目分析:因为这个题目保证了最多只有一个不稳定的点,换句话说在经过上述计算后,最多只有一个点的权值为奇数,这样我们在维护前缀和之后就可以直接二分了,如果当前点的前缀和为奇数,则答案一定在右区间,否则在左区间,现在问题就是怎么维护前缀和,题目中的数值给的都很大,大到了数组无法维护的程度,所以我们必须实时计算前缀和,每次计算时间复杂度为O(n),配合上二分时间复杂度为nlogn,就可以解决这个问题了

根据上述防具的分布,就可以计算一段区间内有多少个防具,对于每个防具就可以O(1)算出贡献了,为了防止爆int,都开longlong就好了

这里要%一下zx学长,又从他那里学会了一种小技巧,关于输入结构体内变量的小技巧,可以在结构体内开一个input函数,又能偷懒了。。

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=2e5+100;int n;struct Node
{LL s,e,d;void input()//%zx{scanf("%lld%lld%lld",&s,&e,&d);}
}a[N];LL check(LL mid)
{LL sum=0;for(int i=1;i<=n;i++)if(a[i].s<=mid)sum+=(min(mid,a[i].e)-a[i].s)/a[i].d+1;//计算方法是区间长度减一后看看有多少个长度为d的区间,令每个区间左端点为防具,此时的加一为第一个防具return sum;
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){scanf("%d",&n);for(int i=1;i<=n;i++)a[i].input();LL l=1,r=INT_MAX;LL pos=-1;while(l<=r){LL mid=l+r>>1;if(check(mid)&1){pos=mid;r=mid-1;}elsel=mid+1;}if(pos==-1)printf("There's no weakness.\n");else{LL ans=check(pos)-check(pos-1);printf("%lld %lld\n",pos,ans);}}return 0;
}

CH - 0805 防线(二分+思维)相关推荐

  1. CH0805 防线 (二分值域,前缀和,特殊性质)

    $ CH~0805~ $ 防线 (二分值域,前缀和,特殊性质) $ solution: $ 注意博主所给题面的输出和原题有些不同 这道题当时想了很久很久,就是想不到怎么写.果然还是太 $ vegeta ...

  2. Showstopper [POJ3484] [二分] [思维]

    Description 给你n个数列,问哪一个数字在所有的数列中出现了奇数次(最多一个). Sample Input 1 10 1 2 10 11 10 1 1 10 11 10 1 4 4 1 1 ...

  3. 【题解】CF1070E Getting Deals Done(二分+思维)难度⭐⭐⭐

    CF1070E Getting Deals Done 题意翻译 题目描述 Polycarp有很多工作要做.最近他学会了一条新的时间管理技巧:"如果任务需要五分钟或更短时间,请立即执行&quo ...

  4. codeforces 808 E. Selling Souvenirs (dp+二分+思维)

    题目链接:http://codeforces.com/contest/808/problem/E 题意:最多有100000个物品最大能放下300000的背包,每个物品都有权值和重量,为能够带的最大权值 ...

  5. 2019 Multi-University Training Contest 1 - 1004 - Vacation - 二分 - 思维

    http://acm.hdu.edu.cn/showproblem.php?pid=6581 一开始想了好几个假算法.但是启发了一下潘哥,假如时间知道的话就可以从头开始确定各个车的位置.那么直接 \( ...

  6. CodeForces - 1370D Odd-Even Subsequence(二分+思维)

    题目链接:点击查看 题目大意:给出一个数组 a ,现在要求选出一个长度恰好为 k 的子序列 s ,使得的值最小 题目分析:当知道了 k 的大小之后,就可以计算出子序列奇数位置和偶数位置各有多少个数了, ...

  7. Anton and Fairy Tale CodeForces - 785C(二分+思维)

    Anton likes to listen to fairy tales, especially when Danik, Anton's best friend, tells them. Right ...

  8. Equalize the Remainders(set二分+思维)

    You are given an array consisting of nn integers a1,a2,-,ana1,a2,-,an, and a positive integer mm. It ...

  9. Cutting Bamboos(牛客多校第九场H主席树+二分+思维)

    链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 There are n bamboos arranged in a line. The i-th ...

最新文章

  1. 7、ns-3建立拓扑
  2. Java黑皮书课后题第3章:**3.23(几何:点是否在矩形内)编写程序,提示用户输入点(x,y),然后检测该点是否在以原点为中心、宽为10、高为5的矩形中
  3. spingboot集成webSocket
  4. windows编辑linux系统文件格式,DOS/Windows和Linux/Unix间的文件格式转换
  5. Exchange Server 2016管理系列课件50.DAG管理之激活数据库副本
  6. spring mvc学习(17)Intellij IDEA创建maven项目无java文件问题
  7. python while语法结构_python语法之流程控制(if while for)
  8. 《Pro ASP.NET MVC 3 Framework》学习笔记之二十四【Controllers和Actions】
  9. Web自动化测试中使用groovy实现页面的对象化
  10. bzoj 2553 [BeiJing2011]禁忌——AC自动机+概率DP+矩阵
  11. (转载)经典SQL语句大全3-技巧篇
  12. Vue学习笔记之07-v-for循环遍历
  13. solr5.5.3+tomcat8部署
  14. IOS 获取软件版本号的方法
  15. 总结与归纳:深度神经网络中的数据融合方法
  16. contents属性
  17. 电商订单系统设计简析(一)
  18. 烟雨峨眉金顶观日出第一次近距离与这座群山环保的小城接触
  19. OpenMP: sections分段并行
  20. 零售商店订单数据分析

热门文章

  1. Redis集群在线分片
  2. MySQL单列索引与复合索引选择
  3. Tomcat和Jetty对WebSocket的支持
  4. MyBatis 缓存详解-开启二级缓存的方法
  5. 为什么要用MyBatis-MyBatis
  6. WebLogic下WAR方式部署获取文件路径问题
  7. (常用API)正则表达式切割练习
  8. 启动和退出mysql的三种方法_Oracle数据库几种启动和关闭方式
  9. html桌面刷新,桌面不能自动刷新怎么办
  10. arcgis加载天地图_ArcGIS Runtime SDK for Android100.5.0端加载天地图服务