T1 [JZOJ1420] 佳肴

题目描述

  佳肴就是非常美味的菜的意思,佳肴最关键的是选择好原料。

  现在有N种原料,每种原料都有酸度S和苦度B两个属性,当选择多种原料时,总酸度为每种原料的酸度之积,总苦度为每种原料的苦度之和。

  正如大家所知,佳肴是既不酸也不苦的,因为要保证所选的原料使得总酸度和总苦度差的绝对值最小。

  由于佳肴不能只有水,所以必须至少选择一种佳肴。

分析

  签到题 无脑暴搜

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 15 int n, ans = inf;
int a[N], b[N]; void dfs(int now, int mul, int sum) {
ans = min(ans, abs(mul - sum));
for (int i = now + ; i <= n; i++)
dfs(i, mul * a[i], sum + b[i]);
} int main() {
scanf("%d", &n);
for (int i = ; i <= n; i++)
scanf("%d%d", a + i, b + i);
for (int i = ; i <= n; i++)
dfs(i, a[i], b[i]);
printf("%d\n", ans); return ;
}

T2 [JZOJ1308] 取数游戏

题目描述

  Alice想让Bob陪他去看《唐山大地震》,但由于Bob是个很感性的人,怕流泪不想去,但又不好意思以这个作为拒绝的理由,便提出玩一个游戏。

  N个正整数围成一圈,规则如下:

  • 两个玩家轮流取数;

  • 最开始先手的玩家可以取任意一个数x;

  • 从第二步开始当前玩家只能取x(上一玩家刚刚取的数)左右两边相邻的数;

  • 直到取完所有的数,游戏结束;

  • 取得较多奇数的玩家获胜。

  Bob为了显示大度,让Alice先取,但他忘了自己和Alice都是绝顶聪明之人,现在Alice请你帮他计算第一步有多少种取法使得最终获得胜利。

分析

  由于是环形的情况,我们可以将序列复制一遍,通过枚举第一次选取的数,把这个位置断开,就变成了区间DP

  设 $g[i]$ 表示第 $i$ 位的奇偶(奇数为 $1$,偶数为 $0$),$f[i][j]$ 表示从区间 $[i,j]$ 开始先手与后手的最大奇数个数差

  于是可以得到 $f[i][j]=max(g[i]-f[i+1][j],g[j]-f[i][j-1])$

  最后枚举第一次选取数字的所有情况,答案就是其中 $f>0$ 的数量

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 105 int n, ans;
int g[ * N], f[ * N][ * N]; int main() {
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d", g + i);
g[n + i] = (g[i] %= );
if (g[i]) f[i][i] = f[n + i][n + i] = ;
}
for (int l = ; l < n; l++)
for (int i = ; i + l - < * n; i++) {
int j = i + l - ;
f[i][j] = max(g[i] - f[i + ][j], g[j] - f[i][j - ]);
}
for (int i = ; i <= n; i++) {
int j = i + n - ;
f[i][j] = g[i] - f[i + ][j];
if (f[i][j] > ) ans++;
}
printf("%d\n", ans); return ;
}

T3 [JZOJ1381] 删除

题目描述

  Alice上化学课时又分心了,他首先画了一个3行N列的表格,然后把数字1到N填入表格的第一行,保证每个数只出现一次,另外两行他也填入数字1到N,但不限制每个数字的出现次数。

  Alice现在想删除若干列使得每一行排完序后完全一样,编程计算最少需要删除多少列。

分析

  由于删除后每一行排完序完全相同,所以其中任意数字必须在三行中均出现

  于是找出第二行或第三行中未出现的数,删除该数在第一行中所在的一整列

  然后反复查找和删除,直到不存在某一列需要被删除,被删除的列数即为答案

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 100005 int n, ans;
int a[N], b[N], c[N];
int pos[N], book[N], book1[N], book2[N]; int main() {
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d", a + i);
book[a[i]] = ;
pos[a[i]] = i;
}
for (int i = ; i <= n; i++) {
scanf("%d", b + i);
book1[b[i]]++;
}
for (int i = ; i <= n; i++) {
scanf("%d", c + i);
book2[c[i]]++;
}
while () {
int ok = ;
for (int i = ; i <= n; i++)
if (!book1[i] && book[i]) {
ans++;
book[i] = ;
book1[b[pos[i]]]--;
book2[c[pos[i]]]--;
ok = ;
}
for (int i = ; i <= n; i++)
if (!book2[i] && book[i]) {
ans++;
book[i] = ;
book1[b[pos[i]]]--;
book2[c[pos[i]]]--;
ok = ;
}
if (ok) break;
}
printf("%d\n", ans); return ;
}

T4 [JZOJ1382] 区间

题目描述

  Alice收到一些很特别的生日礼物:区间。即使很无聊,Alice还是能想出关于区间的很多游戏,其中一个是,Alice从中选出最长的不同区间的序列,其中满足每个区间必须在礼物中,另序列中每个区间必须包含下一个区间。

  编程计算最长序列的长度。

分析

  先将所有区间以左端点为第一关键字从小到大排序,以右端点为第二关键字从大到小排序

  首先这样排序的好处是在判断区间的包含关系时不需要考虑左端点

  设区间 $s$ 的左端点为 $l$,右端点为 $r$,则有

  对于任意 $i<j$, 若 $s[i].r \geq s[j].r$,则 $s[i]$ 包含 $s[j]$

  此时问题就变成了,求区间右端点的最长不上升子序列

  根据数据规模,求最长不上升子序列时需要二分查找

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 100005 int n, ans;
int f[N]; struct Stv {
int l, r;
} s[N]; bool cmp(Stv a, Stv b) {
if (a.l != b.l) return a.l < b.l;
return a.r > b.r;
} int main() {
scanf("%d", &n);
for (int i = ; i <= n; i++)
scanf("%d%d", &s[i].l, &s[i].r);
sort(s + , s + n + , cmp);
for (int i = ; i <= n; i++) {
int l = , r = i;
while (l <= r) {
int mid = (l + r) >> ;
if (f[mid] >= s[i].r) l = mid + ;
else r = mid - ;
}
f[l] = s[i].r;
ans = max(ans, l);
}
printf("%d\n", ans); return ;
}

2019-08-02 纪中NOIP模拟B组的更多相关文章

  1. 2019-08-21 纪中NOIP模拟A组

    T1 [JZOJ6315] 数字 题目描述

  2. 2019-08-15 纪中NOIP模拟B组

    T1 [JZOJ3455] 库特的向量 题目描述 从前在一个美好的校园里,有一只(棵)可爱的弯枝理树.她内敛而羞涩,一副弱气的样子让人一看就想好好疼爱她.仅仅在她身边,就有许多女孩子想和她BH,比如铃 ...

  3. 2019-08-01 纪中NOIP模拟B组

    T1 [JZOJ2642] 游戏 题目描述 Alice和Bob在玩一个游戏,游戏是在一个N*N的矩阵上进行的,每个格子上都有一个正整数.当轮到Alice/Bob时,他/她可以选择最后一列或最后一行,并 ...

  4. 2019-08-25 纪中NOIP模拟A组

    T1 [JZOJ6314] Balancing Inversions 题目描述 Bessie 和 Elsie 在一个长为 2N 的布尔数组 A 上玩游戏. Bessie 的分数为 A 的前一半的逆序对 ...

  5. 2019-08-23 纪中NOIP模拟A组

    T1 [JZOJ2908] 矩阵乘法 题目描述 给你一个 N*N 的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第 K 小数. 数据范围 对于 $20\%$ 的数据,$N \leq 100$,$Q ...

  6. 2019-08-20 纪中NOIP模拟B组

    T1 [JZOJ3490] 旅游(travel) 题目描述 ztxz16如愿成为码农之后,整天的生活除了写程序还是写程序,十分苦逼.终于有一天,他意识到自己的生活太过平淡,于是决定外出旅游丰富阅历. ...

  7. 2019-08-20 纪中NOIP模拟A组

    T1 [JZOJ6310] Global warming 题目描述 给定整数 n 和 x,以及一个大小为 n 的序列 a. 你可以选择一个区间 [l,r],然后令 a[i]+=d(l<=i< ...

  8. 2019-08-18 纪中NOIP模拟A组

    T1 [JZOJ6309] 完全背包 题目描述

  9. 2019-08-09 纪中NOIP模拟B组

    T1 [JZOJ1035] 粉刷匠 题目描述 windy有N条木板需要被粉刷. 每条木板被分为M个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一 ...

  10. 2019-08-17 纪中NOIP模拟B组

    T1 [JZOJ3503] 粉刷 题目描述 鸡腿想到了一个很高(sha)明(bi)的问题,墙可以看作一个N*M的矩阵,有一些格子是有污点的.现在鸡腿可以竖着刷一次,覆盖连续的最多C列,或者横着刷一次, ...

随机推荐

  1. 一键安装最新内核并开启 BBR 脚本

    最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法.根据以往的传统,Google 总是先在自家的生产环境上线运 ...

  2. MySQL 8 批处理模式

    shell> mysql -h host -u user -p < batch-file 强制执行脚本,即使某些语句参数错误,可以添加 --force 参数 如果MySQL运行在Windo ...

  3. 免费生成二维码接口,可直接嵌入到web项目中,附带嵌入方法,任意颜色二维码,任意大小二维码!

    在线体验连接:http://www.zhaimaojun.top/qrcode/ 你是否在项目中寻找方便而且免费的可以直接嵌入到项目中的二维码生成工具呢?你找到了这里,说明你已经找到了!不要犹豫直接拿 ...

  4. WPF DataGrid标题Header Binding失效

    前言:因业务需要对WPF中的DataGrid控件中的行数进行统计,同时把统计的行数显示在列标题上. 如果我们用常规的Binding手段更新DataGridTextColunm的Header的话是不会生 ...

  5. win下的终端使用指南

    win下的终端使用指南 win 下的命令行工具是真的难用 . 具体的难用就不形容了 . 有了 PowerShell 也没觉得好用 . 还是喜欢Linux的终端,及Bash命令. 替换方案 比较好的替换 ...

  6. [CF662C Binary Table][状压+FWT]

    CF662C Binary Table 一道 FWT 的板子-比较难想就是了 有一个 \(n\) 行 \(m\) 列的表格,每个元素都是 \(0/1\),每次操作可以选择一行或一列,把 \(0/1\) ...

  7. Redis基础详解

    1. Redis是什么.特点.优势 Redis是一个开源的使用C语言编写.开源.支持网络.可基于内存亦可持久化的日志型.高性能的Key-Value数据库,并提供多种语言的API. 它通常被称为 数据结 ...

  8. C# WPF过渡效果实现(C# WPF Material Design UI: Transitions)

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  9. golang channel 的一次内存错误

    起因 原因调查 原因分析 问题解决 总结 起因 今天在做数据库数据读取时, 首先通过多个 goroutine 将从数据库读取的数据写入 channel, 同时通过另一个 goroutine 从 cha ...

  10. SSH、telnet配置以及它们之间区别

    命令: SSH ip domain-name www.baidu.com --配置主机名(用来远程访问) user privilege secret --配置账户名和密码 line vty --配置端 ...