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. HDOJ(HDU).1058 Humble Numbers (DP)

    HDOJ(HDU).1058 Humble Numbers (DP) 点我挑战题目 题意分析 水 代码总览 /* Title:HDOJ.1058 Author:pengwill Date:2017-2 ...

  2. bzoj 1150&2151&2288(双向链表+堆)(贪心)

    经典模型:在n个点中选k个点,要求两两不相邻,且总权值最大/最小. 做法:用双向链表串起来,把所有点丢进堆里,选择一个点的时候把它左右两个点从双向链表和堆中去除,然后把这个点的权值加进ans,出堆后改 ...

  3. 深入JavaScript对象创建的细节

    最近深入学习javascript后,有个体会:面向对象的方式编程才是高效灵活的编程,也是现在唯一可以让代码更加健壮的编程方式.如果我们抛开那些玄乎的抽象出类等等思想,我自己对面向对象的从写程序的角度理 ...

  4. 使用Spring Animation的API创建动画

    pring Animation 是一种特殊的动画曲线,自从 iOS 7 开始被广泛应用在系统动画中. Spring Animation 是Linear(线性即匀速)动画.Ease-out(即动画减速地 ...

  5. xshell如何让窗口并列排序

    如图所示:

  6. ZooKeeper管理员指南——部署与管理ZooKeeper

    1.部署 本章节主要讲述如何部署ZooKeeper,包括以下三部分的内容: 系统环境 集群模式的配置 单机模式的配置 系统环境和集群模式配置这两节内容大体讲述了如何部署一个能够用于生产环境的ZK集群. ...

  7. 用pip命令安装Python第三方库

    一.准备工作 1. 安装pip (1)下载 pip下载地址:https://pypi.python.org/pypi/pip#downloads (2)安装 下载后解压,控制台下进入解压后的目录,运行 ...

  8. B树和TreeSet与TreeMap

    1. 此前二叉搜索树相关的内容我们均假设可以把整个数据结构存储在计算机的内存中,但是如果数据量过大时,必须把数据结构放在磁盘上,导致大O模型不在适用.目前计算机处理器每秒至少可以执行5亿条指令,磁盘访 ...

  9. POJ 2823 Sliding Window ST RMQ

    Description An array of size n ≤ 106 is given to you. There is a sliding window of size k which is m ...

  10. 解决在linux安装网易云音乐无法点击图标打开

    一下内容转载自:https://blog.csdn.net/Handoking/article/details/81026651 似乎linux下无法直接打开网易云音乐的原因是图标自带的启动脚本中没有 ...