文章目录

  • 2021.07.16【普及组】模拟赛C组
    • 写在前面:
    • T1:
      • 题目大意:
      • 正解:
    • T2:
      • 题目大意:
      • 正解:
    • T3:
      • 题目大意:
      • 正解:
    • T4:
      • 题目大意:
      • 正解:

2021.07.16【普及组】模拟赛C组

写在前面:

今天是上分(fen)的好日子啊,好日子啊…

三个freopen,痛失210分!!!TAT TAT TAT TATATAT TAT TAT

我人傻了。。。哭啦!!!!!

我要当!题解之王!!哇咔咔咔!!!

来!


T1:

题目大意:

鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!”。 鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。

有经验的多多一眼就能看出,每棵花生植株下的花生有多少。为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。”
我们假定多多在每个单位时间内,可以做下列四件事情中的一件:

  1. 从路边跳到最靠近路边(即第一行)的某棵花生植株;
  2. 从一棵植株跳到前后左右与之相邻的另一棵植株;
  3. 采摘一棵植株下的花生;
  4. 从最靠近路边(即第一行)的某棵花生植株跳回路边。

现在给定一块花生田的大小和花生的分布,请问在限定时间内,多多最多可以采到多少个花生?注意可能只有部分植株下面长有花生,假设这些植株下的花生个数各不相同。 例如在图2所示的花生田里,只有位于(2, 5), (3, 7), (4, 2), (5, 4)的植株下长有花生,个数分别为13, 7, 15, 9。沿着图示的路线,多多在21个单位时间内,最多可以采到37个花生。

正解:

这辱彬逊…不是,这鲁滨逊先生说的那么清楚,肯定是贪心!!!

我们枚举每个开始点,驱使猴子走,枚举:全取,不取最小的,不取最小和第二小的。。。ok,完成!

(dfs骗分的,省省吧。。。)

code:

#include <bits/stdc++.h>using namespace std;struct track {int x;int y;int z;
}f[1001];
const int N = 21;
int n, m, k, l,o;
int mp[N][N];
int maxn = 0;int cmp(track a, track b) {if(a.z == b.z) {if(a.x == b.x) return a.y < b.y;return a.x < b.x;} return a.z > b.z;
}int main() {//  freopen("peanuts.in","r",stdin);
//  freopen("peanuts.out","w",stdout);scanf("%d%d%d", &n, &m, &k);for (int i = 1; i <= n; i ++)for (int j = 1; j <= m; j ++) {scanf("%d", &mp[i][j]);if (mp[i][j] > 0) {l ++;f[l].x = i;f[l].y = j;f[l].z = mp[i][j];     }}o=l;sort(f+1,f+l+1,cmp);      for (int i = 1; i <= n; i ++) {while (o >= 1) {int x = 1, y = i; int ans = 1, sum = 0, p=0;for (int j = 1; j <= o; j ++) {ans += abs(f[j].x-x);ans += abs(f[j].y-y);sum += f[j].z;ans++;y = f[j].y; x = f[j].x;p=f[j].x;if (ans + p > k) break;} ans += p;o--;if(ans > k) continue;else maxn=max(maxn,sum);}o=l;}printf("%d", maxn);}

T2:

题目大意:

我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。

FBI树是一种二叉树[1],它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:

  1. T的根结点为R,其类型与串S的类型相同;

  2. 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。

现在给定一个长度为2N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历[2]序列。

[1] 二叉树:二叉树是结点的有限集合,这个集合或为空集,或由一个根结点和两棵不相交的二叉树组成。这两棵不相交的二叉树分别称为这个根结点的左子树和右子树。

[2] 后序遍历:后序遍历是深度优先遍历二叉树的一种方法,它的递归定义是:先后序遍历左子树,再后序遍历右子树,最后访问根。

正解:

这这这。。。。

建树时输出即可(裸题!!!裸题!!!裸题!!!)

这,不会建树上网查吧。我这个建树应该是最简单的。

code:

#include <bits/stdc++.h>using namespace std;const int N = 10001;
int a[N];
char b[N*2];
char c[N*2];
int n1,n;char dfs(int x) {if(b[x]=='I'||b[x]=='B'||b[x]=='F'){printf("%c",b[x]);return b[x];}char u=dfs(x*2);char v=dfs(x*2+1);if(u=='I'&&v=='I') b[x]='I';else if(u=='B'&&v=='B') b[x]='B';else b[x]='F';printf("%c",b[x]);return b[x];
}int main() {//  freopen("fbi.in","r",stdin);
//  freopen("fbi.out","w",stdout);scanf("%d\n",&n1);int n=pow(2,n1);for(int i=1; i<=n; i++){char x;scanf("%c",&x);if(x=='0') b[n+i-1]='B';else b[n+i-1]='I';}dfs(1);
}

T3:

题目大意:

人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回答。 火星人用一种非常简单的方式来表示数字——掰手指。火星人只有一只手,但这只手上有成千上万的手指,这些手指排成一列,分别编号为1,2,3……。火星人的任意两根手指都能随意交换位置,他们就是通过这方法计数的。 一个火星人用一个人类的手演示了如何用手指计数。如果把五根手指——拇指、食指、中指、无名指和小指分别编号为1,2,3,4和5,当它们按正常顺序排列时,形成了5位数12345,当你交换无名指和小指的位置时,会形成5位数12354,当你把五个手指的顺序完全颠倒时,会形成54321,在所有能够形成的120个5位数中,12345最小,它表示1;12354第二小,它表示2;54321最大,它表示120。下表展示了只有3根手指时能够形成的6个3位数和它们代表的数字: 三进制数 123 132 213 231 312 321 代表的数字 1 2 3 4 5 6 现在你有幸成为了第一个和火星人交流的地球人。一个火星人会让你看他的手指,科学家会告诉你要加上去的很小的数。你的任务是,把火星人用手指表示的数与科学家告诉你的数相加,并根据相加的结果改变火星人手指的排列顺序。输入数据保证这个结果不会超出火星人手指能表示的范围。

正解:

这又臭又长的题面,怎么敢得?

翻译:输出第n个全排列。

就就就这????

我直接一个 : next_premutation()

接近于O(m)过掉。

code:

#include <bits/stdc++.h>using namespace std;int a[1000001];int main()
{//  freopen("martian.in","r",stdin);
//  freopen("martian.out","w",stdout);int n,m;scanf("%d%d",&n,&m);for(int i=1; i<=n; i++) scanf("%d",&a[i]);while(next_permutation(a+1,a+n+1)){m--;if(m==0){ for(int i=1; i<=n; i++) printf("%d ",a[i]);return 0;}}}

T4:

题目大意:

正解:

我们使用数学来求出位数后再用快速幂和高精度即可。

(不会还有人不会吧?)

code:

#include<bits/stdc++.h>const long long mod=10000000000;using namespace std;const int N=2001;int P, l=1,lb=1;int a[N],b[N],c[N];int cheng1() {memset(c,0,sizeof(c));for (int i = 1; i <= l; ++i)   {for (int j = 1; j <= lb; ++j) {c[i+j-1] += a[i] * b[j];c[i+j] += ( c[i+j-1] ) / 10;c[i+j-1] %= 10;}}int lc = l + lb;while(c[lc] == 0) lc-=1;for(int i = 1;i <= lc; ++i){a[i] = c[i];}return lc>500?500:lc;
}
int cheng2() {memset(c,0,sizeof(c));for (int i = 1; i <= lb; ++i)   {for (int j = 1; j <= lb; ++j) {c[i+j-1] += b[i] * b[j];c[i+j] += (c[i+j-1]) / 10;c[i+j-1] %= 10;}}int lc = lb + lb;while(c[lc] == 0) -- lc;for(int i = 1;i <= lc; ++i){b[i] = c[i];}return lc>500?500:lc;
}void power() {while(P) {if(P&1) l = cheng1();P >>= 1;lb = cheng2();}
}int main() {memset( a,0,sizeof(a));memset( b,0,sizeof(b));scanf("%d",&P);printf("%d\n",int (P*log10(2.0)+1)); //求位数的公式。a[1] = 1;b[1] = 2;power();a[1] -= 1;for (int i = 500; i >= 1; --i) printf("%d",a[i]);return 0;
}

2021-07-16 【普及组】模拟赛C组相关推荐

  1. 【jzoj】2018.1.30NOIP普及组——模拟赛D组

    @_@ 前言 写博客时间 2018/1/30 22:36. 感想:出数据的dalao我服! 正题 题目1:二项式展开式(jzoj2254) 输入一个整数,求展开(a+b)^n.展开方式为 (a+b)^ ...

  2. 2021.07.16【普及组】模拟赛C组

    2021.07.16[普及组]模拟赛C组 文章目录 2021.07.16[普及组]模拟赛C组 前言 花生采摘 题目 解析 代码 FBI树 题目 解析 代码 火星人 题目 解析 代码 麦森数 题目 解析 ...

  3. GMOJ - 2021.07.20【普及组】模拟赛C组 - 排座椅(seat)、传球游戏(ball)、立体图(drawing)、间谍派遣、seek

    文章目录 luogu博客链接 GMOJ - 2021.07.20[普及组]模拟赛C组 - 排座椅(seat).传球游戏(ball).立体图(drawing).间谍派遣.seek T1 排座椅(seat ...

  4. 2021.08.09【普及组】模拟赛C组比赛总结

    文章目录 2021.08.09[普及组]模拟赛C组比赛总结 写在前面: T1 :[普及模拟]生产武器 题目大意: 正解: T2 :[普及模拟]城市连接 题目大意: 正解: T3 :[普及模拟]抢救文件 ...

  5. 2020.02.07普及C组模拟赛4

    普及C组模拟赛4 **1.权势二进制 ** 题目描述 一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给 ...

  6. 纪中集训2020.01.16【NOIP普及组】模拟赛C组总结+【0.Matrix】分析

    纪中集训2020.01.16[NOIP普及组]模拟赛C组总结+[0.Matrix]分析 题目: 0.matrix 1.product 2.binary 3.value 巨佬估分:100+100+40+ ...

  7. 2021.7.16模拟赛C组总结(转载XJY)

    2021.7.16模拟赛C组总结 这次比赛,题虽然不难,但丝毫不影响我打挂-唉- 0+100+50+0=150 题解 T1 题目描述: ​ 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小 ...

  8. 2021-07-17【普及组】模拟赛C组

    文章目录 2021.07.17[普及组]模拟赛C组 写在前面: T1: 题目大意: 正解: T2: 题目大意: 正解: T3: 题目大意: 正解: T4: 题目大意: 正解: 2021.07.17[普 ...

  9. 2021-07-17【普及组】模拟赛C组 总结

    2021.07.17[普及组]模拟赛C组 总结 一.前言 今天第比赛还行,第1,2,3题都可以,但题2的一个特判没打出来就 WA 了. 二.题解 1. 开心的金明(happy) 01 背包模板,第一题 ...

最新文章

  1. 特殊的Windows消息
  2. [禅悟人生]越忙的人时间越多
  3. 使用Apache Archiva管理Maven仓库
  4. Docker 镜像之存储管理
  5. BZOJ 2007: [Noi2010]海拔
  6. JVM实用参数(六) 吞吐量收集器
  7. 为什么公司要努力发展数字化战略
  8. 超声的pacs系统和dicom服务器,PACS系统和DICOM标准.ppt
  9. SpringMVC 单文件上传与多文件上传
  10. 详解回调函数(同步回调,异步回调)
  11. ZigBee协议栈解析
  12. PreScan笔记(1)——入坑之简单介绍和Demo
  13. ScmTools(CAD自动标注插件)v2.0官方版
  14. oracle建表类型,oracle 建表类型以及约束
  15. # netstat -s
  16. 手写签名 PNG 制作
  17. 51单片机12864大液晶屏俄罗斯方块 ROTEUS 和51单片机教程(仿真文件+源代码)
  18. 好书推荐 | 2020 年读过的这些好书,建议收藏!
  19. 正交匹配追踪算法OMP(Orthogonal Matching Pursuit)
  20. liunx oracle 12505,ORA-12505 错误解决

热门文章

  1. N沟道MOS管脚位及符号G、S、D代表含义-KIA MOS管
  2. 计算机考证报名照片是什么底
  3. GIS应用:Shapefile导出到cad方法
  4. 你还用PPT做演示文稿吗?
  5. 国产芯片之血压计方案
  6. the frequence of PostgreSQL 9 check the trigger_file
  7. HDU 5418 Victor and World 允许多次经过的TSP
  8. 收集到的若干测速网站
  9. 测试不能隶属开发部门
  10. 产业企业和投资机会研究