牛客练习赛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 ...
随机推荐
- ics httpDELETE 时增加 content,length 特别需求
unit: OverbyteIcsHttpProt.pasprocedure THttpCli.SendRequest(const Method, Version: String); var Head ...
- Android百分比布局方案
百分比布局让其中的控件在指定高度,宽度,margin时使用屏幕宽高的百分比,不使用dp,px.这样一套布局可以适应多个屏幕,方便适配.如: app:layout_heightPercent=" ...
- python学习11-类的成员(转载)
一.变量 1.实例变量(又叫字段.属性) 创建对象时给对象赋值 形式: self.xxx = xxx 访问: 对象名.xxx 只能由对象访问 class Person: def __init_ ...
- 《The Python Standard Library》——http模块阅读笔记1
官方文档:https://docs.python.org/3.5/library/http.html 偷个懒,截图如下: 即,http客户端编程一般用urllib.request库(主要用于“在这复杂 ...
- shell的常用脚本一
批量创建用户名脚本: ######################################################################### # File Name: cr ...
- C#DataTable与Model互转
/// <summary> /// 实体转换辅助类 /// </summary> public class ModelConvertHelper<T> where ...
- Python 断言的使用方法
自动化测试常用断言的使用方法(python) 自动化测试中寻找元素并进行操作,如果在元素好找的情况下,相信大家都可以较熟练地编写用例脚本了,但光进行操作可能还不够,有时候也需要对预期结果进行判断. 这 ...
- 使用 GitHub API 进行数据分析 (Node.js)
使用 GitHub API 进行数据分析 (Node.js) Node.js 的访问 GitHub 的 API 库,通过 npm 或者 yarn 安装: yarn add github-api 官方示 ...
- nyoj 349&Poj 1094 Sorting It All Out——————【拓扑应用】
Sorting It All Out 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 An ascending sorted sequence of distinct ...
- Java Collection.Set
package 集合; /** * Set不包含重复元素 存储顺序和取出数据不一样 * * HashSet:它不保证set的迭代顺序,特别是它不保证该顺序恒久不变 * 底层是哈希表结构的 * Link ...