牛客练习赛20(ABC)
A. 礼物
题意:
我从买奥利奥的事情中想出了一个算法题:假设某个店铺有N种不同类型的1元奥利奥和M种不同类型的2元奥利奥,而且余量无限,我的钱有k元,我想把k元都用来买奥利奥,且可以买同类型的奥利奥,你能帮我算出有多少种购买方式吗?设答案为Z,这个数字也许会很大,所以我们只需要输出Z mod P的值。
分析:
计数问题,可以考虑动态规划:每个物品可以选无数次,即无穷背包,注意无穷背包的递推写法。
- #include <bits/stdc++.h>
- using namespace std;
- const int MAXN = ;
- int N,M,K,P;
- int d[MAXN];
- int main()
- {
- int T;
- scanf("%d",&T);
- while(T--) {
- memset(d,,sizeof(d));
- scanf("%d%d%d%d",&N,&M,&K,&P);
- d[] = ;
- for(int i = ; i <= N; i++) {
- for(int k = ; k <= K; k++)
- d[k] = (d[k] + d[k-])%P;
- }
- for(int i = ; i <= M; i++) {
- for(int k = ; k <= K; k++)
- d[k] = (d[k] + d[k-])%P;
- }
- printf("%d\n",d[K] );
- }
- return ;
- }
-
B. 麻婆豆腐
题意:
“咳咳...请听题!我手上有n枚硬币,第i枚正面朝上的概率是Pi。我现在每个硬币各抛一次,正面朝上看做1,背面朝上看做0,把所有硬币得到的数异或起来决定最后得到的数。问:有多少个子集合使得0和1的概率相等?” 不管音无给了怎样的数,奏都是一分钟不到就算出来了!不愧是前学生会长啊~ 于是他们就去食堂吃麻婆豆腐了,现在,你也来算一下吧。
分析:
可以说这个题很惊世骇俗了,当一个硬币的概率是0.5时,它一反转,所得异或值就会改变,而且概率相等,反之,当他的概率不是0.5时,概率必然不等,答案就转化为有多少个集合至少含有一个0.5的硬币,取补集,概率为0.5的硬币是
- int main() {
- int T; scanf("%d",&T);
- for(int i = ; i < T; i++) {
- int n; scanf("%d",&n);
- int cnt = ;
- double p;
- for(int i = ; i < n; i++) {
- scanf("%lf",&p);
- if(p==0.5) cnt++;
- }
- cnt = n - cnt;
- long long ans = ,cnts=;
- for(int i = ; i < n; i++)
- ans<<=;
- for(int i = ; i < cnt; i++)
- cnts<<=;
- cout<<ans-cnts<<endl;
-
- }
- return ;
- }
C. 寻宝
题意:
这个迷宫由n个房间组成,编号为0到n - 1,每个房间里都有一颗宝石,房间通过单向通道连接。每个房间里有两个门:一个通向第R个房间(R=(a·v2 + b·v + c) mod n),另一个通向迷宫出口,一旦离开迷宫,便会触发自毁机关,将再也没有机会继续收集宝石。现在,她可以在任何地点进入迷宫,沿隧道移动并收集宝石。
分析:
因为每个点,出度均为1,点的数目 ,时间复杂度需要 。
那么图里面只有环,和链+环,这样标记遍历即可。
首先遍历链,发现有环后,从那里再第二次标记,这样,环上每个结点都是环的长度。
链就相应要短一些。注意,访问的时候,下面的节点已经访问过了。
- #include <bits/stdc++.h>
- using namespace std;
- long long a,b,c,m;
- long long f(long long v) {
- return (a*v*v + b*v + c)%m;
- }
- int main()
- {
- //freopen("in.txt","r",stdin);
- int T;
- scanf("%d",&T);
- while(T--) {
- scanf("%lld%lld%lld%lld",&a,&b,&c,&m);
- vector<long long> L(m,-);
- for(long long i = ; i < m; i++) {
- if(L[i]>=) continue;
- long long p = i;
- long long plen = ;
- while(L[p]==-) {
- L[p] = -;
- plen ++;
- p = f(p);
- }
- if(L[p]>) {
- plen+=L[p];
- }
- long long clen = ;
- while(L[p]==-) {
- L[p] = -;
- clen++;
- p = f(p);
- }
- p = i;
- while(L[p]<) {
- if(L[p]==-) L[p] = clen;
- if(L[p]==-) L[p] = plen--;
- p = f(p);
- }
- }
- cout<<*max_element(L.begin(),L.end())<<endl;
- }
- return ;
- }
牛客练习赛20(ABC)的更多相关文章
- 牛客练习赛 29 E 位运算?位运算!(线段树)
题目链接 牛客练习赛29E 对$20$位分别建立线段树.首先$1$和$2$可以合起来搞(左移右移其实是等效的) 用个lazy标记下.转移的时候加个中间变量. $3$和$4$其实就是区间$01$覆盖操 ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
- [堆+贪心]牛客练习赛40-B
传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费 x_i 的时间,同时完成第 i 个任务的时间不 ...
- 牛客练习赛22C Bitset
牛客练习赛22C 一共有 n个数,第 i 个数是 xi xi 可以取 [li , ri] 中任意的一个值. 设 ,求 S 种类数. 感觉二进制真是一个神奇的东西. #include <iost ...
随机推荐
- EditText属性
来自http://mp.weixin.qq.com/s/Yncr0XZ4MCWZH2vzTVyYJw android:inputType=”none”android:inputType=”text”a ...
- 【程序员技术练级】学习一门脚本语言 python(二)遍历本地文件系统
这篇将讲述怎么使用python来遍历本地文件系统,并把文件按文件大小从小到大排序的一个小例子 在这个例子中,主要会用到python内置的和OS模块的几个函数: os.walk() : 该方法用来遍历指 ...
- Ubuntu以及CentOS7修改ssh端口号详细步骤
1.Ubuntu修改ssh端口号步骤: 1.修改sshd.config文件.执行vim etc/ssh/sshd_config.增加上我们需要增加的ssh的端口号.图例增加了5309的端口号. ESC ...
- js判断触摸方向
$("body").on("touchstart", function(e) { e.preventDefault(); startX = e.original ...
- Windows x64位通过PEB获得Kernel32基地址
在64位系统下 gs:[0x30] 指向TEB gs:[0x60] 指向PEB kd> dt _TEB nt!_TEB +0x000 NtTib : _NT_TIB +0x000 Excepti ...
- Linux Kernel文件系统写I/O流程代码分析(一)
Linux Kernel文件系统写I/O流程代码分析(一) 在Linux VFS机制简析(二)这篇博客上介绍了struct address_space_operations里底层文件系统需要实现的操作 ...
- 很有用的PHP笔试题系列三
1. 什么事面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰.主要特征:封装.继承.多态. 2. SESSION 与 COOKIE的区别是什么,请从 ...
- 8、列表:ion-list
1.基本样式 no-lines 属性 隐藏列表项之间的分割符 inset 属性 去掉 ion-list的 外边框. 默认 的 ion-list 是有外边框的. /* ---示例代码----*/ & ...
- solidity合约面向对象
1. 属性[状态变量]的访问权限 public internal[合约属性默认的权限] private 说明:属性默认访问全向为internal,internal和private类型的属性,外部是 ...
- 重构指南 - 移除重复内容(Remove Duplication)
在项目中或多或少的都存在着重复的或者功能相似的代码,如果要对代码做改动,就要修改多个地方,所以我们需要将多处重复的代码提取到一个公共的地方供统一调用,以减少代码量,提高代码可维护性. 重构前代码 pu ...