A. 礼物

题意:

我从买奥利奥的事情中想出了一个算法题:假设某个店铺有N种不同类型的1元奥利奥和M种不同类型的2元奥利奥,而且余量无限,我的钱有k元,我想把k元都用来买奥利奥,且可以买同类型的奥利奥,你能帮我算出有多少种购买方式吗?设答案为Z,这个数字也许会很大,所以我们只需要输出Z mod P的值。

分析:

计数问题,可以考虑动态规划:每个物品可以选无数次,即无穷背包,注意无穷背包的递推写法。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = ;
  4. int N,M,K,P;
  5. int d[MAXN];
  6. int main()
  7. {
  8. int T;
  9. scanf("%d",&T);
  10. while(T--) {
  11. memset(d,,sizeof(d));
  12. scanf("%d%d%d%d",&N,&M,&K,&P);
  13. d[] = ;
  14. for(int i = ; i <= N; i++) {
  15. for(int k = ; k <= K; k++)
  16. d[k] = (d[k] + d[k-])%P;
  17. }
  18. for(int i = ; i <= M; i++) {
  19. for(int k = ; k <= K; k++)
  20. d[k] = (d[k] + d[k-])%P;
  21. }
  22. printf("%d\n",d[K] );
  23. }
  24. return ;
  25. }

B. 麻婆豆腐

题意:

“咳咳...请听题!我手上有n枚硬币,第i枚正面朝上的概率是Pi。我现在每个硬币各抛一次,正面朝上看做1,背面朝上看做0,把所有硬币得到的数异或起来决定最后得到的数。问:有多少个子集合使得0和1的概率相等?” 不管音无给了怎样的数,奏都是一分钟不到就算出来了!不愧是前学生会长啊~ 于是他们就去食堂吃麻婆豆腐了,现在,你也来算一下吧。

分析:

可以说这个题很惊世骇俗了,当一个硬币的概率是0.5时,它一反转,所得异或值就会改变,而且概率相等,反之,当他的概率不是0.5时,概率必然不等,答案就转化为有多少个集合至少含有一个0.5的硬币,取补集,概率为0.5的硬币是 ​ ​

  1.  
  1. int main() {
  2. int T; scanf("%d",&T);
  3. for(int i = ; i < T; i++) {
  4. int n; scanf("%d",&n);
  5. int cnt = ;
  6. double p;
  7. for(int i = ; i < n; i++) {
  8. scanf("%lf",&p);
  9. if(p==0.5) cnt++;
  10. }
  11. cnt = n - cnt;
  12. long long ans = ,cnts=;
  13. for(int i = ; i < n; i++)
  14. ans<<=;
  15. for(int i = ; i < cnt; i++)
  16. cnts<<=;
  17. cout<<ans-cnts<<endl;

  18. }
  19. return ;
  20. }

C. 寻宝

题意:

这个迷宫由n个房间组成,编号为0到n - 1,每个房间里都有一颗宝石,房间通过单向通道连接。每个房间里有两个门:一个通向第R个房间(R=(a·v2 + b·v + c) mod n),另一个通向迷宫出口,一旦离开迷宫,便会触发自毁机关,将再也没有机会继续收集宝石。现在,她可以在任何地点进入迷宫,沿隧道移动并收集宝石。

分析:

因为每个点,出度均为1,点的数目 ​ ,时间复杂度需要 ​ 。

那么图里面只有环,和链+环,这样标记遍历即可。

首先遍历链,发现有环后,从那里再第二次标记,这样,环上每个结点都是环的长度。

链就相应要短一些。注意,访问的时候,下面的节点已经访问过了。

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. long long a,b,c,m;
  6.  
  7. long long f(long long v) {
  8. return (a*v*v + b*v + c)%m;
  9. }
  10.  
  11. int main()
  12. {
  13. //freopen("in.txt","r",stdin);
  14. int T;
  15. scanf("%d",&T);
  16.  
  17. while(T--) {
  18.  
  19. scanf("%lld%lld%lld%lld",&a,&b,&c,&m);
  20. vector<long long> L(m,-);
  21.  
  22. for(long long i = ; i < m; i++) {
  23. if(L[i]>=) continue;
  24.  
  25. long long p = i;
  26. long long plen = ;
  27.  
  28. while(L[p]==-) {
  29. L[p] = -;
  30. plen ++;
  31. p = f(p);
  32. }
  33.  
  34. if(L[p]>) {
  35. plen+=L[p];
  36. }
  37.  
  38. long long clen = ;
  39. while(L[p]==-) {
  40. L[p] = -;
  41. clen++;
  42. p = f(p);
  43. }
  44.  
  45. p = i;
  46. while(L[p]<) {
  47. if(L[p]==-) L[p] = clen;
  48. if(L[p]==-) L[p] = plen--;
  49. p = f(p);
  50. }
  51. }
  52. cout<<*max_element(L.begin(),L.end())<<endl;
  53. }
  54. return ;
  55. }

牛客练习赛20(ABC)的更多相关文章

  1. 牛客练习赛 29 E 位运算?位运算!(线段树)

    题目链接  牛客练习赛29E 对$20$位分别建立线段树.首先$1$和$2$可以合起来搞(左移右移其实是等效的) 用个lazy标记下.转移的时候加个中间变量. $3$和$4$其实就是区间$01$覆盖操 ...

  2. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

  3. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

  4. 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A

    牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...

  5. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

  6. 牛客练习赛28-B(线段树,区间更新)

    牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ ​ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, ​ 1 l r 询问区间[l,r]内的元素和 ​ 2 l r 询问区间[l,r]内的 ...

  7. 牛客练习赛26:D-xor序列(线性基)

    链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...

  8. [堆+贪心]牛客练习赛40-B

    传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费  x_i 的时间,同时完成第 i 个任务的时间不 ...

  9. 牛客练习赛22C Bitset

    牛客练习赛22C 一共有 n个数,第 i 个数是 xi  xi 可以取 [li , ri] 中任意的一个值. 设 ,求 S 种类数. 感觉二进制真是一个神奇的东西. #include <iost ...

随机推荐

  1. EditText属性

    来自http://mp.weixin.qq.com/s/Yncr0XZ4MCWZH2vzTVyYJw android:inputType=”none”android:inputType=”text”a ...

  2. 【程序员技术练级】学习一门脚本语言 python(二)遍历本地文件系统

    这篇将讲述怎么使用python来遍历本地文件系统,并把文件按文件大小从小到大排序的一个小例子 在这个例子中,主要会用到python内置的和OS模块的几个函数: os.walk() : 该方法用来遍历指 ...

  3. Ubuntu以及CentOS7修改ssh端口号详细步骤

    1.Ubuntu修改ssh端口号步骤: 1.修改sshd.config文件.执行vim etc/ssh/sshd_config.增加上我们需要增加的ssh的端口号.图例增加了5309的端口号. ESC ...

  4. js判断触摸方向

    $("body").on("touchstart", function(e) { e.preventDefault(); startX = e.original ...

  5. Windows x64位通过PEB获得Kernel32基地址

    在64位系统下 gs:[0x30] 指向TEB gs:[0x60] 指向PEB kd> dt _TEB nt!_TEB +0x000 NtTib : _NT_TIB +0x000 Excepti ...

  6. Linux Kernel文件系统写I/O流程代码分析(一)

    Linux Kernel文件系统写I/O流程代码分析(一) 在Linux VFS机制简析(二)这篇博客上介绍了struct address_space_operations里底层文件系统需要实现的操作 ...

  7. 很有用的PHP笔试题系列三

    1. 什么事面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰.主要特征:封装.继承.多态. 2. SESSION 与 COOKIE的区别是什么,请从 ...

  8. 8、列表:ion-list

    1.基本样式 no-lines 属性 隐藏列表项之间的分割符 inset 属性 去掉 ion-list的 外边框. 默认 的 ion-list 是有外边框的.   /* ---示例代码----*/ & ...

  9. solidity合约面向对象

    1. 属性[状态变量]的访问权限 public  internal[合约属性默认的权限]  private 说明:属性默认访问全向为internal,internal和private类型的属性,外部是 ...

  10. 重构指南 - 移除重复内容(Remove Duplication)

    在项目中或多或少的都存在着重复的或者功能相似的代码,如果要对代码做改动,就要修改多个地方,所以我们需要将多处重复的代码提取到一个公共的地方供统一调用,以减少代码量,提高代码可维护性. 重构前代码 pu ...