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
```c++
#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
```c++
#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}$所到达的最高点(*根节点为终点*). 必然有一些点到达不了根节点, 那么就让它来控制这个点; 必然有在不同时间到达根节点的点, 这些点可以去控制根节点的不同没被控制的子树; 所以最后找出所有**没有被控制的树点**和**能到达根节点的军队**进行贪心即可.
  细节太多了, 很讨厌呐.\]

NOIP 2012 Day2的更多相关文章

  1. noip 2012 Day2 T2 借教室

    一.暴力简述 甩链接.jpeg 首先我们不难看出,这道题————并不是一道多难的题,因为显然,第一眼看题目时便很容易地想到暴力如何打:枚举每一种订单,然后针对每一种订单,对区间内的每一天进行修改(做减 ...

  2. NOIp 2012 #2 借教室 Label:区间修改线段树

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...

  3. NOIp 2012 #1 Vigenère 密码 Label:模拟

    题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...

  4. NOIP 2012 Day2T2 借教室题解

    NOIP 2012 Day2T2 借教室题解 题目传送门:http://codevs.cn/problem/1217/ 题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动 ...

  5. NOIP 2012 T5 借教室 [洛谷P1083]

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...

  6. 【NOIP 2012 疫情控制】***

    题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都, 也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散 ...

  7. 【NOIP 2012 开车旅行】***

    题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 ...

  8. 【NOIP 2012 国王游戏】 贪心+高精度

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...

  9. NOIP 2012 Vigenère 密码

    洛谷 P1079 Vigenère 密码 https://www.luogu.org/problemnew/show/P1079 JDOJ 1779: [NOIP2012]Vigenèr密码 D1 T ...

随机推荐

  1. [学习笔记]NTT——快速数论变换

    先要学会FFT[学习笔记]FFT——快速傅里叶变换 一.简介 FFT会爆精度.而且浮点数相乘常数比取模还大. 然后NTT横空出世了 虽然单位根是个好东西.但是,我们还有更好的东西 我们先选择一个模数, ...

  2. HTTP的特点?

    (1)HTTP是无连接: 无连接的含义是限制每次连接只处理一个请求.服务器处理完客户的请求,并收到客户的应答后,即断开连接.采用这种方式可以节省传输时间. (2)HTTP是媒体独立的: 这意味着,只要 ...

  3. [解决] Error Code: 1044. Access denied for user 'root'@'%' to database

    今天在测试集群用的mysql上,遇到个权限的问题: SQLException : SQL state: 42000 com.mysql.jdbc.exceptions.jdbc4.MySQLSynta ...

  4. arm架构与体系结构

    1.cpu与soc 内核版本号与soc版本号由arm公司确定. 芯片型号由各半导体公司确定. soc包括cpu与一些基本内设.(一般提到CPU都指的是soc,实际上cpu只是soc的一部分). RIS ...

  5. 神奇的sed替换

    1. 替换含有某关键字的行 $ sed 's/.*ami-07bc4ae4d4d662f53.*/ami = "ami-07bc4ae4d4d662f53898989898989" ...

  6. Fiddler进行模拟POST、PUT提交数据注意点

    1.请求头要加 Accept: application/xml Content-Type: application/json 2.地址栏url地址后不要忘记加“/” 3.POST和PUT的对象参数都是 ...

  7. LightOJ 1341 - Aladdin and the Flying Carpet 基本因子分解

    http://www.lightoj.com/volume_showproblem.php?problem=1341 题意:给你长方形的面积a,边最小为b,问有几种情况. 思路:对a进行素因子分解,再 ...

  8. Golang向Templates 插入对象的值

    Go对象可以插入到template中,然后把对象的值表现在template中,你可以一层层的分解这个对象,去找他的子字段,当前对象用'.'来表示,所以当当前对象是一个string的时候,你可以用{{. ...

  9. python学习笔记(七)之列表

    列表:是一个加强版的数组,什么东西都可以往里面放. 创建列表 创建一个普通列表: >>> member = ['operating system', 'data structure' ...

  10. H5特性 MutationObserver 监听元素 动态改变iframe高度

    这些代码要写在iframe页中执行 <script type="text/javascript"> $(function () { // Firefox和Chrome早 ...