NOIP模拟17.9.21

1 任务安排
manage.in/.out/.cpp
1.1 问题描述
你有N 个工作,同一时刻只能做一个任务, 其中每个工作有其所需时
间, 及完成的Deadline(截止时间), 问要完成所有工作, 最迟要从什么时候开
始。
你最早可以从时间0 开始工作。
1.2 输入格式
第一行一个整数N,表示任务数量
接下来n 行,每行两个整数,Ti; Si,分别表示该任务的持续时间和截
止时间。
1.3 输出格式
输出一个整数,表示最晚的开始时间,如果不能完成,输出-1。
1.4 样例输入
4
3 5
8 14
5 20
1 16
1.5 样例输出
2
1.6 数据规模及约定
对于40% 的数据,N <= 20
对于60% 的数据,N <= 1000
对于100% 的数据,1<= N <= 100000
1<= Ti <= 100000
1<= Si <= 1000000

【题解】

水题贪心不解释

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b)) inline void read(int &x)
{
x = ;char ch = getchar(), c = ch;
while(ch < '' || ch > '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '', ch = getchar();
if(c == '-')x = -x;
} const int INF = 0x3f3f3f3f;
const int MAXN = + ; struct Node
{
int s,t;
}node[MAXN]; bool cmp(Node a, Node b)
{
return a.t < b.t;
} int n; int main()
{
read(n);
for(register int i = ;i <= n;++ i)
read(node[i].s), read(node[i].t);
std::sort(node + , node + + n, cmp);
int begin = node[].t - node[].s;
int now = node[].t;
for(register int i = ;i <= n;++ i)
{
now += node[i].s;
if(now > node[i].t)
{
begin -= now - node[i].t;
now = node[i].t;
}
}
printf("%d", max(-, begin));
return ;
}

T1

小a 的强迫症
qiang.in/.out/.cpp
2.1 问题描述
小a 是一名强迫症患者,现在他要给一群带颜色的珠子排成一列,现在
有N 种颜色,其中第i 种颜色的柱子有num(i) 个。要求排列中第i 种颜色
珠子的最后一个珠子,一定要排在第i+1 种颜色的最后一个珠子之前。问
有多少种排列珠子的方案。
2.2 输入格式
第一行一个整数N,表示珠子颜色数量
第二行N 个整数,分别表示每种珠子的颜色数量
2.3 输出格式
排列方案数,对998244353 取余
2.4 样例输入
3
2 2 1
2.5 样例输出
3
2.6 数据规模及约定
共3 种排列方案:
1 2 1 2 3
1 1 2 2 3
2 1 1 2 3
对于40% 的数据,所有珠子数量和小于15
对于80% 的数据,N <= 1000,所有珠子数量和小于5000
对于100% 的数据,N <= 100000,所有珠子数量和小于500000

【题解】

一开始想的正解然后马上否定然后推出错误的式子然后挂掉了。

本题有一个很强的限制,叫“排列中第i 种颜色珠子的最后一个

珠子,一定要排在第i+1 种颜色的最后一个珠子之前”

不难想递推

num[i]表示第i种珠子颜色

sum[i] = Σnum[1...i]

f[i]表示前i种颜色柱子的方案数

常规思路,对于每一种前i - 1种珠子的放法,考虑第i种珠子怎么放

第i种珠子一定有一颗放到最后面,剩余的num[i] - 1颗可以随便

往前面插。我们可以想成共有sum[i] - 1个空位,选num[i] - 1个空位

放第i种颜色的珠子,其余放已经确定的一种第i - 1种珠子的方法

于是f[i] = f[i - 1] * C(sum[i] - 1,  num[i] - 1)

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b)) inline void read(long long &x)
{
x = ;char ch = getchar(), c = ch;
while(ch < '' || ch > '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '', ch = getchar();
if(c == '-')x = -x;
} const long long INF = 0x3f3f3f3f;
const long long MAXN = + ;
const long long MOD = ; long long n, num[MAXN], sum[MAXN], ans; long long pow(long long a, long long b)
{
long long r = , base = a % MOD;
for(;b;b >>= )
{
if(b&)r *= base, r %= MOD;
base *= base, base %= MOD;
}
return r;
} long long f[]; long long ni(long long a)
{
if(a == )return ;
return pow(a, MOD - );
} long long C(long long n, long long m)
{
if(m > n)return ;
return ((f[n]%MOD * ni(f[m]))%MOD * ni(f[n - m]))%MOD;
} int main()
{
read(n);
for(register long long i = ;i <= n;++ i)
{
read(num[i]);
num[i]%=MOD;
sum[i] = sum[i - ] + num[i];
sum[i] %= MOD;
}
f[] = ;
for(register long long i = ;i <= ;++ i) f[i] = f[i - ] * i, f[i] %= MOD;
ans = ;
for(register long long i = ;i <= n;++ i)
{
ans *= C(sum[i] - , num[i] - );
ans %= MOD;
}
printf("%lld", ans);
return ;
}

T2

3 函数求和
sum.in/.out/.cpp
3.1 问题描述
你有一个含N 个数字的数组A,元素标号1 到N,同时他也有N 个函
数,也标号1 到N。
第i 个函数会返回数组中标号Li 和Ri 之间的元素的和。
现在有以下两种询问:
1 x y 将数组的第x 个元素修改为y。
2 m n 询问标号在m 和n 之间的函数的值的和。
3.2 输入格式
输入数据第一行包含一个整数N,表示数组的长度和函数的数量。
接下来的一行包含N 个整数,表示数组中的元素Ai。
接下来的N 行,每行包含两个整数Li;Ri,表示一个函数。
接下来一行包含一个整数Q,表示询问次数。
下面Q 行,每行一个询问,格式见题目描述。
3.3 输出格式
对于每个第2 类询问,输出相应的答案。
3.4 样例输入
5
1 2 3 4 5
1 3
2 5
4 5
3 5
1 2
4
2 1 4
1 3 7
2 1 4
2 3 5
4
3.5 样例输出
41
53
28
3.6 数据规模及约定
对于前20% 的数据: N 1000;Q 1000
对于另外30% 的数据: Ri

NOIP模拟17.9.21的更多相关文章

  1. NOIP模拟17.9.22

    NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥

  2. NOIP模拟 17.8.17

    NOIP模拟17.8.17 A 小 G 的字符串文件名 输入文件 输出文件 时间限制 空间限制str.pas/c/cpp str.in str.out 1s 128MB[题目描述]有一天,小 L 给小 ...

  3. NOIP模拟 17.8.20

    NOIP模拟17.8.20 A.阶乘[题目描述]亲爱的xyx同学正在研究数学与阶乘的关系,但是他喜欢颓废,于是他就制作了一个和阶乘有关系的数学游戏:给出两个整数 n,m,令 t = !n,每轮游戏的流 ...

  4. NOIP模拟 17.8.18

    NOIP模拟17.8.18 A.小菜一碟的背包[题目描述]Blice和阿强巴是好朋友但萌萌哒Blice不擅长数学,所以阿强巴给了她一些奶牛做练习阿强巴有 n头奶牛,每头奶牛每天可以产一定量的奶,同时也 ...

  5. NOIP模拟 17.8.15

    NOIP模拟17.8.15 A 债务文件名 输入文件 输出文件 时间限制 空间限制debt.pas/c/cpp debt.in debt.out 1s 128MB[题目描述]小 G 有一群好朋友,他们 ...

  6. NOIP模拟 17.8.16

    NOIP模拟17.8.16 A 债务文件名 输入文件 输出文件 时间限制 空间限制debt.pas/c/cpp debt.in debt.out 1s 128MB[题目描述]小 G 有一群好朋友,他们 ...

  7. NOIP模拟 17.8.14

    NOIP模拟17.8.14 (天宇哥哥考察细心程度的题) [样例解释]如果删去第一个 1:在[3,1,2]中有 3 个不同的数如果删去 3:在[1,1,2]中有 2 个不同的数如果删去第二个 1:在[ ...

  8. NOIP模拟 17.9.28

    公交车[问题描述]市内有

  9. Noip模拟17 2021.7.16

    我愿称这场考试为STL专练 T1 世界线 巧妙使用$bitset$当作vis数组使用,内存不会炸,操作还方便,的确是极好的. 但是这个题如果不开一半的$bitset$是会炸内存的,因为他能开得很大,但 ...

随机推荐

  1. 《DSP using MATLAB》Problem 8.11

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  2. 使用Windows任务计划程序和Python备份Mysql数据库

    目标:每日定时自动备份Mysql数据库 方案: 1.安装Python: 使用的Python版本是Python3.7.1,下载地址:https://www.python.org/downloads/re ...

  3. sscanf linux-c从一个字符串中读进与指定格式相符的数据

    https://www.cnblogs.com/lanjianhappy/p/6861728.html 函数原型: Int sscanf( string str, string fmt, mixed ...

  4. Vue基础知识梳理

    1. Vue 实例 1.1 创建一个Vue实例 一个 Vue 应用由一个通过 new Vue 创建的根 Vue 实例,以及可选的嵌套的.可复用的组件树组成.demo 1.2 数据与方法 数据的响应式渲 ...

  5. LUOGU P4074 [WC2013]糖果公园 (树上带修莫队)

    传送门 解题思路 树上带修莫队,搞了两天..终于开O2+卡常大法贴边过了...bzoj上跑了183s..其实就是把树上莫队和带修莫队结合到一起,首先求出括号序,就是进一次出一次那种的,然后如果求两个点 ...

  6. Coursera ML笔记 - 神经网络(Representation)

    前言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自Standford Andrew N ...

  7. utils04_搭建私有Git服务器

    1.远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改.GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给G ...

  8. jeecms v9导入myeclipse 2015 ehcache.xml报错问题

    1.找不到ehcache.xml文件问题 cache-context.xml <property name="configLocation"> <value> ...

  9. javascript date utc

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangbin10025/article/details/37503465 近期在使用highsto ...

  10. Vue. 之 刷新当前页面,重载页面数据

    Vue. 之 刷新当前页面,重载页面数据 如下截图,点击左侧不同的数据,右侧根据左侧的KEY动态加载数据.由于右侧是同一个页面,在进行路由跳转后,不会再次刷新数据. 解决方案: 右侧的页面中 scri ...