NOIP 2012 Day2
tags:
- 扩展欧几里得
- 二分答案
- 查分
- 倍增
- 二分答案
- 贪心
- NOIP
categories: - 信息学竞赛
- 总结
同余方程
借教室
疫情控制
同余方程
Solution
首先同余式可以转化为等式.
\[ax\equiv 1\mod b\Leftrightarrow ax+by=1\]
根据扩展欧几里得定理, 对于式
\[ax+by=k(a,b),k\in \mathbf{R}\]一定存在整数解.然而题面说一定存在解, 也就是说\((a,b)=1\), 然后就可以利用扩展欧几里得递归求得一组解.利用这组解加上取模, 就可以获得最小整数解.
Code
#include<cstdio>
void exgcd(int a,int b,int &x,int &y){if(!b){x=1,y=0;return ;}exgcd(b,a%b,y,x);y-=x*(a/b);
}int main(){int a,b,x,y;scanf("%d%d",&a,&b);exgcd(a,b,x,y);printf("%d",(x%b+b)%b);return 0;
}
借教室
Solution
可以发现近些年 NOIP 总是出二分答案的题.
其实就是给出一些操作, 每次对一定区间减去一个数, 求在哪次操作之后产生了负数.然而可以用线段树强行做, 也可以用一些巧妙一点的办法.
- 线段树, 只需要有区间加操作和查询区间最小值操作, 一般线段树可以拿到95分, 还可以用可以各种卡常技巧, zkw线段树或者是标记永久化来加快.
- 二分一个值\(\text{T}\), 表示前\(\text{T}\)次借教室后会不会出现不合法情况(即某天教室只剩下负数间), 然后用差分借完\(T\)次教室后每一天剩下的教室数.这个一般情况是不会被卡的.注意对于答案的记录.
Code
#include<cstring>
#include<cstdio>
#define N 1000055
#define inf 0x3f3f3f3f
#define int long long
struct Node{int l,r,s;void init(){scanf("%lld%lld%lld",&s,&l,&r);}
}s[N];int n,m,d[N];
int qi[N];
int ans;int min(int a,int b){return a<b?a:b;
}bool check(int tim){qi[0]=0;for(int i=1;i<=n;++i)qi[i]=d[i]-d[i-1];for(int i=1;i<=tim;++i)qi[s[i].l]-=s[i].s,qi[s[i].r+1]+=s[i].s;int he=0;for(int i=1;i<=n+1;++i){he+=qi[i];if(he<0){ans=min(ans,tim);return false;}}return true;
}main(){ans=inf;scanf("%lld%lld",&n,&m);for(int i=1;i<=n;++i)scanf("%lld",&d[i]);for(int i=1;i<=m;++i)s[i].init();int l=1,r=m,mid;while(l<=r){mid=(l+r)>>1;if(!check(mid))r=mid-1;else l=mid+1;}if(l>=m)printf("0");else printf("-1\n%lld",ans);return 0;
}
疫情控制
并不是很明白为什么一天会出两道二分答案的题目...
首先二分一个值\(\text{T}\), 表示在\(\text{T}\)时刻内能封锁这棵树
还是有一个很重要的贪心策略, 就是一个点在到达根节点之前总是越往上走越好.然后根据倍增确定出每个点在给定时间\(\text{T}\)所到达的最高点(根节点为终点). 必然有一些点到达不了根节点, 那么就让它来控制这个点; 必然有在不同时间到达根节点的点, 这些点可以去控制根节点的不同没被控制的子树; 所以最后找出所有没有被控制的树点和能到达根节点的军队进行贪心即可.
细节太多了, 很讨厌呐.
转载于:https://www.cnblogs.com/qdscwyy/p/8728111.html
NOIP 2012 Day2相关推荐
- [普及] NOIP 2012 文化之旅
题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一 种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不 同的国家可能有相同的文化.不同 ...
- NOIP 2012 普及组 复赛 culture 文化之旅
NOIP 2012 普及组 复赛 culture 文化之旅 1.找寻迪杰斯特拉(Dijkstra)算法,难度适中,过程中,找到该题. 2.结合题意,弄懂输入输出样例是关键一步. 3.为了能解决2,纸笔 ...
- NOIP 2012 开车旅行
题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 ...
- P1083 [NOIP 2012]借教室
https://www.luogu.org/problem/show?pid=1083#sub 一开始容易想到的方法是线段树,每次修改时,如果出现负数,那么当前这个人一定不能满足了. 但是在noip里 ...
- NOIP 2011 Day2
tags: 贪心 模拟 NOIP categories: 信息学竞赛 总结 计算系数 Solution 根据二项式定理, \[ \begin{align} (a+b)^n=\sum_{k=0}^nC_ ...
- NOIP模拟day2 2020.10.30
今天这题啊,难度肯定达到了,这真的是NOIP吗?不过质量还是高啊. T1 首先,题目看似第一要求边数目,第二才管权值.但我们不能就这样掉坑里了,去先找多少条边.注意到在一个连通块中,当边数最多时一定是 ...
- Luogu P1082 同余方程(NOIP 2012) 题解报告
题目传送门 [题目大意] 求关于x的同余方程 ax≡1(mod b)的最小整数解. [思路分析] 由同余方程的有关知识可得,ax≡1(mod b)可以化为ax+by=1,此方程有解当且仅当gcd(a, ...
- NOIP 2012 T2 国王游戏 (贪心+高精)
思路: 呃呃网上那么多题解写得都不错-.. 就是高精 巨坑... 这里展出的是任氏高精(纯自己yy滴) //By SiriusRen #include <cstdio> #include ...
- NOIP 2012 同余方程
菜到数论啥也不会了orz... 根据扩展欧几里得定理:ax + by = gcd(a,b)必定有至少一组解,且可以通过这个算法求出x,y的一组解 过程如下: 根据gcd(a,b) = gcd(b,a ...
最新文章
- doxygen相关问题 转
- nginx之静态资源访问和负载均衡的使用!
- python散点图显示数据_Python数据可视化——散点图
- Bootstrap日期插件之Datetimepicker修改默认语言(附带源码)
- 2020-2-15技术积累-时间插件-前端获取后端数据生成表格
- 停止linux下正在执行的ping命令
- 初探SQL Server 2017 on Docker@macOS
- python程序怎么给别人运行_如何使Python脚本作为服务运行?
- 引用activity_允许其他应用启动您的 Activity
- DICM和BMP图像的显示及转换
- RYYB图像格式学习
- Latex输出大小写罗马数字
- 书摘---创业36条军规3:创业人七大须知
- 【设计模式】【第四章】【订单状态流转】【状态模式 + 享元模式+模板方法模式】
- java 投票防重复_关于防止重复刷投票的个人观点
- 安防人眼里的“区块链玩法遛狗也能赚钱”
- APP遇到大量的真实手机号刷注册用户该如何应对?
- seq to seq
- Rosalind第二题:将DNA转录为RNA
- 使用fiddler获取ios手机接口
热门文章
- iOS 11 UICollectionView顶部出现白色间隔的问题
- Something about Giraffe (II)
- MySQL在Django框架下的基本操作(MySQL在Linux下配置)
- Save info in Hidden Field
- python a and b_python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更...
- shell脚本 -d 是目录文件,那么-e,-f分别是什么?还有! -e这又是什么意思呢?
- 蓝桥杯 2011年第二届C语言初赛试题(2)
- 836c语言程序设计,2017年辽宁师范大学计算机应用研究所836C语言程序设计考研强化模拟题...
- 剖析java中的String之__拼接
- 昆士兰科技大学计算机专业,昆士兰科技大学QUT计算机科学Computer Science专业排名第101-125位(2021年THE世界大学商科排名)...