Noip 模拟练习5

  • 满分300,本人240。修正后300。
  • 难度中等。

太空密码

Description

  • 人类一直致力于探索地外文明,为此科学家们建造了一个巨大的射电望远镜
    用于接收宇宙射线。一天从宇宙深处传来一连串神秘电波,每串电波可以看成是一个三进制
    数,即由 0、 1、 2 构成,长度均不超过 40,最特别的是通过对大量有电波分析发现:每串电
    波中都没有出现连续的 0。科学家们猜想电波中包含着外星人的密码,为了破译其中的奥秘,
    现在请你写一个程序,统计出满足要求的长度为 N 的电波的总数。
    例如:当 N=2 时,满足要求的电波有 8 个: 01、 02、 10、 11、 12、 20、 21、 22。 00 不满
    足要求,因为出现了连续的 0

Input

  • 输入文件 password.in 给出一个不超过 40 的正整数 N,表示电波串的长度。
    其中 50%的数据 1≤N≤15。

Output

  • 在文件 password.out 给出长度为 N 且没有连续 0 的串的个数。

Sample Input

2

Sample output

8

题解:

  • dp。

  • 设dp(i, 0/1/2)表示第i个位置上是0/1/2时的方案数,那么所求就是dp(n, 0) + dp(n, 1) + dp(n, 2)。转移也十分简单,见代码。

#include <iostream>
#include <cstdio>
#define N 55
using namespace std;long long n;
long long f[N][4];int main()
{cin >> n;f[1][0] = f[1][1] = f[1][2] = 1;for(int i = 2; i <= n; i++)f[i][0] = f[i - 1][1] + f[i - 1][2],f[i][1] = f[i - 1][0] + f[i - 1][1] + f[i - 1][2],f[i][2] = f[i - 1][0] + f[i - 1][1] + f[i - 1][2];cout << f[n][0] + f[n][1] + f[n][2];return 0;
}

作业调度方案

题目:

  • 有图,转链接

题解:

  • 模拟。
  • 这题难在题目难理解,其实解题方法就在题目中,看懂题目就是一道模拟题。以下为翻译版本:

  • 有m台机器加工n个工件,每个工件都有m个工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。现在给你一个“安排顺序”,请你按照“安排顺序”的顺序模拟,最终求出完成这些任务所花费的最短时间。
  • 愣什么,模拟啊!

#include <iostream>
#include <cstdio>
#define N 25
#define inf 0x7fffffff
using namespace std;struct A {int obj, id, val, las;} a[N * N];
struct B {int id, val;} b[N][N];
int n, m, ans;
int g[N], t[N];
int form[N][405];bool check(int id, int l, int r)
{for(int i = l; i <= r; i++)if(form[id][i]) return 0;return 1;
}void cal(int obj, int id, int val, int las)
{if(!las){for(int i = 1; ; i++)if(check(id, i, i + val - 1)){for(int j = i; j <= i + val - 1; j++)form[id][j] = obj;t[id] = max(t[id], i + val - 1);break;}return;}int idd = a[las].id, pos;for(int i = t[idd]; i >= 1; i--)if(form[idd][i] == obj) {pos = i; break;}for(int i = pos + 1; ; i++)if(check(id, i, i + val - 1)){for(int j = i; j <= i + val - 1; j++)form[id][j] = obj;t[id] = max(t[id], i + val - 1);break;}
}int main()
{cin >> m >> n;for(int i = 1; i <= m * n; i++) cin >> a[i].obj;for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)cin >> b[i][j].id;for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)cin >> b[i][j].val;for(int i = 1; i <= m * n; i++)a[i].id = b[a[i].obj][++g[a[i].obj]].id,a[i].val = b[a[i].obj][g[a[i].obj]].val;for(int i = 1; i <= m * n; i++){int x = a[i].obj;for(int j = i - 1; j >= 1; j--)if(a[j].obj == x) {a[i].las = j; break;}}for(int i = 1; i <= m * n; i++)cal(a[i].obj, a[i].id, a[i].val, a[i].las);for(int i = 1; i <= m; i++) ans = max(ans, t[i]);cout << ans;return 0;
}

引水入城

题目:

  • 有图,转链接

题解:

  • bfs + 贪心。
  1. bfs算出每个点所能控制的左边界,右边界。

  2. 看看表示能否到达所有干旱区。不能进入第3步,能进入第4步。

  3. 扫一遍看看有多少干旱区不可能建有设施,输出答案。进入第5步。

  4. 贪心的跑一遍区间覆盖,输出答案。进入第5步。

  5. 结束。

  • 问题来了,在每个点能控制的左右边界之间的那些干旱区,你怎么知道可以控制呢?换句话说,你怎么知道控制的一定是一段区间呢?
  • 这位大大的blog讲得不错,推荐。
  • 最后补充一下,我的代码本地AC,洛谷90pts超时一个点。据说数据加强了要记忆化,那么我懒我就没有继续修正了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define N 505
#define inf 0x7fffffff
using namespace std;struct E {int l, r;} e[N];
struct Node {int x, y, h;};
int n, m, last, ans;
int a[N][N];
bool tag[N];
bool vis[N][N];
int dx[5] = {0, -1, 1, 0, 0};
int dy[5] = {0, 0, 0, -1, 1};int read()
{int x = 0, f = 1; char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();}return x *= f;
}void bfs(int x, int y, int dfn)
{queue<Node> que;memset(vis, 0, sizeof(vis));Node tmp;tmp.x = x, tmp.y = y, tmp.h = a[x][y];que.push(tmp), vis[x][y] = 1;while(que.size()){Node now = que.front(); que.pop();for(int i = 1; i <= 4; i++){tmp.x = now.x + dx[i], tmp.y = now.y + dy[i], tmp.h = a[tmp.x][tmp.y];if(now.h > tmp.h && !vis[tmp.x][tmp.y] && tmp.x >= 1 && tmp.x <= n && tmp.y >= 1 && tmp.y <= m){vis[tmp.x][tmp.y] = 1;que.push(tmp);}}}for(int i = 1; i <= m; i++)if(vis[n][i]) {e[dfn].l = i; break;}for(int i = m; i >= 1; i--)if(vis[n][i]) {e[dfn].r = i; break;}for(int i = e[dfn].l; i <= e[dfn].r; i++) tag[i] = 1;
}int main()
{cin >> n >> m;for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)a[i][j] = read();for(int i = 1; i <= m; i++) bfs(1, i, i);for(int i = 1; i <= m; i++)if(!tag[i]){cout << 0 << endl;for(int j = 1; j <= m; j++)if(!tag[j]) ans++;cout << ans;return 0;}cout << 1 << endl;int l = 1;while(l <= m){int r = 0;for(int i = 1; i <= m; i++)if(e[i].l <= l) r = max(r, e[i].r);ans++, l = r + 1;}cout << ans;return 0;
}

转载于:https://www.cnblogs.com/BigYellowDog/p/11346531.html

Noip 模拟练习5相关推荐

  1. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  2. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

  3. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  4. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26

    背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...

  5. jyzy noip模拟赛5.22-2

    不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...

  6. NOIP模拟赛csy2021/10/30

    NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...

  7. NOIP模拟(10.22)T2 杆子的排列

    杆子的排列 题目背景: 10.22 NOIP模拟作业T2 分析:DP 定义状态dp[i][j][k]表示,目前枚举到第i大的数(即n - i + 1)那么显然如果这一个数放在左边,可以在左边被看到,放 ...

  8. NOIP模拟赛 四校联考 递推 + 分类讨论 + 树上期望

    NOIP 模拟题 题目名称兔子被子蚊子 源程序文件名rabbit.cpp quilt.cpp mosquito.cpp 输入文件名rabbit.in quilt.in mosquito.in 输出文件 ...

  9. 【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告

    [WZOI第二次NOIP模拟赛Day1T2]世界末日 Problem 2 世界末日 (doomsday.pas/c/cpp) 背景 话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西, ...

最新文章

  1. 关于什么事情能做到和不能做到的思考
  2. 基础练习 01字串 c语言
  3. java移除input焦点_java – Eclipse editText在按下完成后删除焦点(光标)
  4. error while loading shared libraries: libiconv.so.2: cannot open shared object file
  5. [转]jQuery-1.3.2学习笔记
  6. 图片md5值不一样_夏天宅家,拍点不一样的宝骏530车模图片!
  7. 剑三哪些插件是必备的_盘点那些年用过的神级CAD插件,每一款都舍不得卸载
  8. 小米手机插上android找不到驱动,小米手机连接电脑不显示文件怎么办?
  9. 计算机专业sci二区论文难吗,SCI二区论文发表难度大吗
  10. 大数据定价方法的国内外研究综述及对比分析
  11. 内核编译支持bonding模块
  12. 京东自营客服考试答案
  13. 猫哥教你写爬虫 042--session的用法
  14. Tomcat(4)-集群
  15. 数据分析/运营——重要业务指标小结
  16. 跳绳机 高频霍尔开关 MH253
  17. 诺贝尔奖你知道多少呢?
  18. 《哪吒》将在北美上映,网友问:我命由我不由天该怎么翻译?
  19. CRAFT:Character Region Awareness for Text Detection 论文详解
  20. c++序列号生成(注册码)附demo

热门文章

  1. 蓝牙手环企业标准备案办理说明
  2. 新型冠状病毒肺炎预防宣传PPT模板-优页文档
  3. linux系统在物流公司的z作用,Linux平台下物流仓储系统的智能化设计.pdf
  4. Java实现发送邮件带多个附件,可以直接用
  5. echarts仿支付宝芝麻信用分环形图
  6. STM32F4+ESP8266拟辉光钟设计(一)简介及时间获取
  7. win10系统如何恢复回收站删除文件
  8. 传感器学习——旋转编码器
  9. Linux下/usr/bin/ld: 找不到 -lz
  10. (礼拜一log)前端开发:jsp中获得当前时间