题目链接                       y总讲解

达达学习数学竞赛的时候受尽了同仁们的鄙视,终于有一天......受尽屈辱的达达黑化成为了黑暗英雄怪兽达达。

就如同中二漫画的情节一样,怪兽达达打算毁掉这个世界。

数学竞赛界的精英 lqr 打算阻止怪兽达达的阴谋,于是她集合了一支由数学竞赛选手组成的超级行动队。

由于队员们个个都智商超群,很快,行动队便来到了怪兽达达的黑暗城堡的下方。

但是,同样强大的怪兽达达在城堡周围布置了一条“不可越过”的坚固防线。

防线由很多防具组成,这些防具分成了 N 组。

我们可以认为防线是一维的,那么每一组防具都分布在防线的某一段上,并且同一组防具是等距离排列的。

也就是说,我们可以用三个整数 S, E 和 D 来描述一组防具,即这一组防具布置在防线的 S,S+D,S+2D,…,S+KD(K∈Z,S+KD≤E,S+(K+1)D>E)位置上。

黑化的怪兽达达设计的防线极其精良。

如果防线的某个位置有偶数个防具,那么这个位置就是毫无破绽的(包括这个位置一个防具也没有的情况,因为 0 也是偶数)。

只有有奇数个防具的位置有破绽,但是整条防线上也最多只有一个位置有奇数个防具。

作为行动队的队长,lqr 要找到防线的破绽以策划下一步的行动。

但是,由于防具的数量太多,她实在是不能看出哪里有破绽。

作为 lqr 可以信任的学弟学妹们,你们要帮助她解决这个问题。

输入格式

输入文件的第一行是一个整数 T,表示有 T 组互相独立的测试数据。

每组数据的第一行是一个整数 N。

之后 N 行,每行三个整数 Si,Ei,Di,代表第 i 组防具的三个参数,数据用空格隔开。

输出格式

对于每组测试数据,如果防线没有破绽,即所有的位置都有偶数个防具,输出一行 "There's no weakness."(不包含引号) 。

否则在一行内输出两个空格分隔的整数 P 和 C,表示在位置 P 有 C 个防具。当然 C 应该是一个奇数。

数据范围

防具总数不多于10^8,

Si≤Ei,

1≤T≤5,

N≤200000,

0≤Si,Ei,Di≤2^31−1;

输入样例:

3
2
1 10 1
2 10 1
2
1 10 1
1 10 1
4
1 10 1
4 4 1
1 5 1
6 10 1

输出样例:

1 1
There's no weakness.
4 3

题意

在一个数轴上,给定n组等差数列,s表示等差数列首项,e表示等差数列上界,d表示公差;

在每组等差数列每个点上放一个防具,每组等差数列的点可能会重合;

例如第一组数据:1 10 1,2 10 2;

第一组1表示首项,10表示上界,1表示公差,

所以在1,2,3,4,5,6,7,8,9,10这几个点都放一个防具,

同理,第2组表示在2,3,4,5,6,7,8,9,10这几个点放置防具,

所以点1有一个防具,2-10都有两个防具,1的防具数量为奇数,所以输出(1,1);

思路:前缀和+二分;

前缀和:我们用前缀和求出x点及其之前的防具数量,对于每组数据s,e,d;

如果s<=x,则这组数据对前缀和的贡献为(min(e,x)-s)/d+1;

我们可以遍历每组数据求出其对前缀和的贡献值,进而求出整个x点之前的防具数量;

二分:由于每组数据最多只有一个点的防具数量为奇数,所以假设xo为奇数点,

任意x点(x<xo)的前缀和的防具数量都为偶数,任意x点(x>=xo)的前缀和防具数量是奇数(偶数+奇数=偶数)。

所以根据这个特性,可以二分进行查找xo点;

时间复杂度:二分时间为logn次;每次二分求出前缀和的时间为On;总时间复杂度为O(n*logn);

注意:数据要用long long不然会报错(Float Point Exception)

#include<iostream>
using namespace std;
const int N=2e5+10;
using ll=long long;
struct seq{ll s,e,d;
}seqs[N];//数据结构体集合int n;ll check(ll x){//求出该点前缀和的防具数量ll res=0;for(int i=0;i<n;++i){if(seqs[i].s<=x)res+=ll(min(seqs[i].e,x)-seqs[i].s)/seqs[i].d+1;}return res;
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t;cin>>t;while(t--){cin>>n;ll l=0,r=0;for(int i=0;i<n;++i){cin>>seqs[i].s>>seqs[i].e>>seqs[i].d;r=max(r,seqs[i].e);}while(l<r){//二分ll mid=(l+r)>>1;if(check(mid)&1){r=mid;}else l=mid+1;}ll sum=check(l)-check(l-1);if(sum%2) cout<<l<<' '<<sum<<endl;else cout<<"There's no weakness."<<endl;}return 0;
}

PS:也可以一次性O(n)求出所有点的前缀和,这样时间复杂度就是O(n+logn),
不过由于题目数据太大,这样要开很大空间,感兴趣可以自己尝试;

算法竞赛进阶指南0x10练习6:防线相关推荐

  1. 算法竞赛进阶指南0x10练习7:Corral the Cows

    农夫约翰希望为他的奶牛们建立一个畜栏. 这些挑剔的畜生要求畜栏必须是正方形的,而且至少要包含 C 单位的三叶草,来当做它们的下午茶. 畜栏的边缘必须与 X,Y轴平行. 约翰的土地里一共包含 N 单位的 ...

  2. 算法竞赛进阶指南0x10练习9:Soldiers

    原题链接 格格兰郡的 N 名士兵随机散落在全郡各地. 格格兰郡中的位置由一对 (x,y)整数坐标表示. 士兵可以进行移动,每次移动,一名士兵可以向上,向下,向左或向右移动一个单位(因此,他的 x 或  ...

  3. 《算法竞赛进阶指南(by 李煜东)》习题题解 集合

    又是笔者给自己挖的大坑. 这里是李煜东所著<算法竞赛进阶指南(by 李煜东)>的习题题解集合. 有任何错误请在对应文章下反馈或联系 nicest1919@163.com ,谢谢 qwq 从 ...

  4. 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩

    文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...

  5. 《算法竞赛进阶指南》数论篇

    <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSGS <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSG ...

  6. CH5202 自然数拆分Lunatic版(算法竞赛进阶指南,完全背包)

    算法竞赛进阶指南,278页,完全背包 本题要点: 1.把完全背包的代码改改即可.常规的完全背包: 有n个物品,每个物品的体积是v[i], 价值是w[i], 求装到大小为m的大背包,能获得的最大价值(每 ...

  7. 中位数--《算法竞赛进阶指南》(货仓选址和七夕祭问题详解)

    中位数 今天又和大家见面了啦~ 依旧是 <算法竞赛进阶指南>的学习哦~ 中位数(Median)又称中值,统计学中的专有名词,是按顺序排列的一组数据中居于中间位置的数,代表一个样本.种群或概 ...

  8. 金字塔(算法竞赛进阶指南)

    虽然探索金字塔是极其老套的剧情,但是有一队探险家还是到了某金字塔脚下. 经过多年的研究,科学家对这座金字塔的内部结构已经有所了解. 首先,金字塔由若干房间组成,房间之间连有通道. 如果把房间看作节点, ...

  9. AcWing 122. 糖果传递【贪心】【《算法竞赛进阶指南》,微软面试题 , HAOI2008】

    AcWing 122. 糖果传递 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 122. 糖果传递 进阶题目 AcWing 105 ...

  10. 算法竞赛进阶指南 骑士放置

    4: 最大独立集 :选出最多的点,使得选出的点之间没有边. 求最大独立集:选出最小的点可以破坏所有的边 <==>最小点覆盖 <==>最大匹配数. 假设最大匹配数为m,共有n个点 ...

最新文章

  1. C#创建WinForm应用程序的入口点
  2. What is the difference between BTD and Q35
  3. 计算机二进制基础列式,计算机基础;十进制数100对应的二进制数、八进制数和十六进制数分别是...
  4. 编译mGi软键盘部分[原创]
  5. mysql group by cube_SparkSQL 中group by、grouping sets、rollup和cube方法详解
  6. linux python安装pip_linux安装pip2.7
  7. python进行删除标点符号
  8. 5000预算组装台式机配置清单
  9. “金三银四” “金九银十”是找工作的好时期吗?疫情下的招聘季还会是金三银四、金九银十吗?
  10. SQL中的in、not in语句遇到null时的坑点
  11. Python学习(九)Python缩进规则
  12. IDEA 的 show diagram 画出的类图线条乱了怎么办
  13. vivo X21的Usb调试模式在哪里,打开vivo X21Usb调试模式的步骤
  14. 一款超方便超强大的16进制编辑器软件-HxD
  15. Tomcat 配置Oracle JNDI数据源
  16. 阿里云高新技术企业认定介绍及常见问题
  17. Linux内核 实践二
  18. 凸轮等速推程C语言编程,凸轮设计_C语言编程.doc
  19. Silverlight 2.5D RPG游戏技巧与特效处理:(三)动态光影
  20. #fff安卓显示黑色

热门文章

  1. python彩色螺旋线_python绘制彩色螺旋线
  2. html好看的侧滑效果,H5 - 侧滑效果实现
  3. wifi的WPS功能
  4. MatplotlibDeprecationWarning: Calling gca() with keyword arguments was deprecated in Matplotlib 3.4.
  5. ppt怎么压缩,ppt压缩的技巧分享
  6. STM32+QRCode二维码生成
  7. FineBI中tomcat服务器部署
  8. strtolower() 把字符串转换为小写字母
  9. Hadoop伪分布式
  10. mysql like查询很慢_MySQL Like模糊查询速度慢的解决方法