https://www.nowcoder.com/acm/contest/156#question

链接:https://www.nowcoder.com/acm/contest/156/A
来源:牛客网

题目描述

紧张刺激的世界杯正在进行中(在托米的世界线里),欧洲人托米沉迷于赌球无法自拔。
托米的口袋里有 100 元,50元,20元,10元,5元,2元,1元的纸币,50分,20分,10分,5分,2分,1分的硬币各无限个。
托米计划买下几注 a 元 b 分的彩票,他希望能支出的纸票数量和硬币数量之和最小,他希望你帮助他完成这个任务。同时由于彩票亭不支持找零,托米希望他的支出恰好等于 a 元 b 分

输入描述:

第一行输入一个正整数 T下面 T 行每行两个整数 a,b

输出描述:

每行输出 13 个正整数 n

1

 ...n

13

, 对应题面顺序给出最小化支出纸票数量和硬币数量之和的情况下,每种货币的使用次数,如果有多种方案,输出字典序最大的一种,注意这里字典序是依次比较n1到n13,而不是简单的把 13 个正整数拼接在一起

输入例子:
2
1 5
2 4
输出例子:
0 0 0 0 0 0 1 0 0 0 1 0 0
0 0 0 0 0 1 0 0 0 0 0 2 0

-->

示例1

输入

复制

2
1 5
2 4

输出

复制

0 0 0 0 0 0 1 0 0 0 1 0 0
0 0 0 0 0 1 0 0 0 0 0 2 0

备注:

T=100,0≤ a≤ 10

9

, 0≤ b<100
  贪心就好了,很经典的题目,把分也换算成元然后乘上100倍,这样一遍扫过去就好了。
 #include<bits/stdc++.h>
using namespace std;
int coin[];
int A[]={,,,,,,,,,,,,};
int main(){
long long a,b,t,i,j,k;
cin>>t;
while(t--){
scanf("%lld%lld",&a,&b);
a*=;
a+=b;
memset(coin,,sizeof(coin));
for(i=;i<;++i){
coin[i]=a/A[i];
a-=a/A[i]*A[i];
}
for(i=;i<;++i) printf("%d%c",coin[i],i==?'\n':' ');
}
return ;
}
链接:https://www.nowcoder.com/acm/contest/156/B
来源:牛客网

题目描述


欧洲人托米非常喜欢数字,他经常在空闲时玩下面的游戏
对于一个数字 n, 托米会随性选中一个数 p, (1 < p <=  n), 将 n 拆分成 ,v=n-u,并对 u,v 重复这个过程,直到他有了 n 个 1
1317 为了挑战托米,在每次托米进行划分时,会给托米奖励 u * v 的分数,托米希望你能帮他最大化他的得分。

输入描述:

第一行一个正整数 T下面 T 行每行一个正整数 n

输出描述:

对于每组数据,输出托米的最大得分

输入例子:
1 5
输出例子:
10

-->

示例1

输入

复制

1 5

输出

复制

10

备注:

T≤ 10

4

, n≤ 10

9

 
  观察后发现答案就是前n-1个正整数的和。
  

 #include<bits/stdc++.h>
using namespace std;
int main(){
long long t,n;
cin>>t;
while(t--){
scanf("%lld",&n);
n--;
printf("%lld\n",(+n)*n/);
}
return ;
}

链接:https://www.nowcoder.com/acm/contest/156/C
来源:牛客网

题目描述

托米完成了1317的上一个任务,十分高兴,可是考验还没有结束
说话间1317给了托米 n 个自然数 a1... an, 托米可以选出一些带回家,但是他选出的数需要满足一些条件
设托米选出来了k 个数 b1,b2... bk, 设这个数列 b 的给值为 b 中所有数按位与的结果,如果你能找到一个整除 b 的最大的 2v,(v≥ 0), 则设定 v 为这个数列的给价,如果不存在这样的 v,则给价值为 -1, 1317 希望托米在最大化给价的情况下,最大化 k

输入描述:

第一行输入一个整数 n, 第二行输入 a

1

...a

n

输出描述:

第一行输出最大的整数 k, 第二行输出 k 个整数 b

1

... b

k

, 按原数列的相对顺序输出 (如果行末有额外空格可能会格式错误)

输入例子:
5
1 2 3 4 5
输出例子:
2
4 5

-->

示例1

输入

复制

5
1 2 3 4 5

输出

复制

2
4 5

备注:

n≤ 10

5

, a

1

... a

n < 231

  从大到小来枚举v,如果遇到当前的v可行,直接break输出就好了。在判断v是否可行的时候,
我们只要选出所有二进制的第v位是1的数,然后判断一下这些数后面v-1位的&是否为0即可。如
果第v位为0,要想保证结果成立那么前面必然要有一位&之后能为1,如果存在的话显然v可以更大,
这就自相矛盾了,所以我们不必考虑第v位不为1的数。当时就是没考虑到这一点没有A掉= =
  
 #include<bits/stdc++.h>
using namespace std;
#define LL long long
LL a[];
vector<LL>v;
int main(){
int n;
scanf("%d",&n);
for(int i=;i<=n;++i) scanf("%lld",a+i);
for(int i=;i>=;--i){
v.clear();
LL ans=((1LL<<i)-),tmp=(1LL<<i);
for(int i=;i<=n;++i){
if(a[i]&tmp) ans&=a[i],v.push_back(a[i]);
}
if(ans==) break;
}
cout<<v.size()<<endl;
for(int i=;i<v.size();++i){
printf("%lld%c",v[i],i==v.size()-?'\n':' ');
}
return ;
}

链接:https://www.nowcoder.com/acm/contest/156/D
来源:牛客网

题目描述

托米没有完成上一个任务,准备施展黑魔法推倒 1317

黑魔法咒语被描述为一个 长为 n 的,仅包含小写英文字母 'a'...'i' 的字符串,在托米所在的星球,魔法造成的每次有效伤害都是来自他的一个子序列,对于每一个 'a'... 'i' 的排列(共 9! 种),若作为咒语的子序列出现, 就会造成 1 的伤害

而咒语的总伤害为所有 'a'... 'i' 的排列造成的伤害值之和,托米能打出多少点的伤害,是否能击败 1317 呢?

输入描述:

一行输入一个字符串 s

输出描述:

一行输出一个数,表示伤害值

输入例子:
aabcdefghi
输出例子:
1

-->

示例1

输入

复制

aabcdefghi

输出

复制

1

备注:

|s| ≤  3000
  暴力的枚举"abcdefghi"的全排列,然后判断每一个是否可行,建立26个set保存不同字母出现的
下标,每次优先选择一个最小的且在在上一个下标之后的下标,如果不存在说明不可行。
 #include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
char s1[],s2[]="abcdefghi";
set<int>S[];
int main(){ scanf("%s",s1+);
int len=strlen(s1+),i,j,ans=;
if(len<){
puts("");
return ;
}
for(i=;i<=len;++i){
S[s1[i]-'a'].insert(i);
}
do{
int d=-;
for(j=;j<;++j){
if(S[s2[j]-'a'].empty())break;
int x=*S[s2[j]-'a'].lower_bound(d);
if(x<d)break;
else d=x;
}
if(j==) ans++;
}while(next_permutation(s2,s2+)); printf("%d\n",ans);
return ;
}


链接:https://www.nowcoder.com/acm/contest/156/F
来源:牛客网

题目描述


题目背景编不下去了

托米有一棵有根树 T, 树根为1,每轮他会在剩下的子树中等概率一个点 u, 砍掉 u 的子树 (包含 u),如果树上的点都被砍光了,游戏结束。

求出这个游戏进行的期望轮数,可以证明这个数一定是有理数,设他为 , 你需要告诉他一个整数 x 满足

输入描述:

第一行输入一个数 n, 表示 T 的点数,下面 n-1 行给出了 T 的每条边

输出描述:

一行一个整数表示答案

输入例子:
3
1 2
1 3
输出例子:
2

-->

示例1

输入

复制

3
1 2
1 3

输出

复制

2

备注:

n ≤ 10

5     

    和的期望等于期望的和,我们统计出每一个点对期望的贡献然后再求和就好了。只有删除u或u的祖先才会使得u消失,而只有删除u才会使得u做出贡献,这个概率是 1/dep[u],也就是1/u的深度,所以处理出来dep[]数组求和就好了。
  
 #include<bits/stdc++.h>
using namespace std;
#define LL long long
LL mod=;
const int maxn=;
int first[maxn],tot;
int f[maxn];
struct Edge { int v,next; }e[maxn<<];
void add(int u,int v){
e[tot].v=v;
e[tot].next=first[u];
first[u]=tot++;
}
LL gcd(LL a,LL b){ return b?gcd(b,a%b):a; }
LL qpow(LL a,LL b){ LL ans=;for(;b;a=a*a%mod,b>>=)if(b&) ans=ans*a%mod; return ans; }
void dfs(int u,int fa){
f[u]=+f[fa];
for(int i=first[u];~i;i=e[i].next){
int v=e[i].v;
if(v==fa) continue;
dfs(v,u);
}
}
int main(){
int n,i,u,v;
memset(first,-,sizeof(first));
cin>>n;
for(i=;i<n;++i){
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
dfs(,);
//for(i=1;i<=n;++i) cout<<f[i]<<endl;
LL x=,y=;
for(i=;i<=n;++i){
x=(x*f[i]%mod+y)%mod;
y=y*f[i]%mod;
LL g=gcd(x,y);
x/=g;
y/=g;
}
//cout<<x<<' '<<y<<endl;
printf("%lld\n",x*qpow(y%mod,mod-)%mod);
return ;
}
/*
6
1 2
1 3
2 6
3 4
3 5
*/

 

牛客练习赛23-A/B/C/D/F的更多相关文章

  1. Nowcoder 牛客练习赛23

    Preface 终于知道YKH他们为什么那么喜欢打牛客网了原来可以抽衣服 那天晚上有空就也去玩了下,刷了一波水TM的YKH就抽到了,我当然是没有了 题目偏水,好像都是1A的.才打了一个半小时,回家就直 ...

  2. 牛客练习赛 23 C 托米的位运算

    链接:https://www.nowcoder.com/acm/contest/156/C来源:牛客网 托米完成了1317的上一个任务,十分高兴,可是考验还没有结束 说话间1317给了托米 n 个自然 ...

  3. 牛客练习赛23 F 托米的游戏

    https://www.nowcoder.com/acm/contest/156/F 树 概率 #include <cstdio> #include <cstdlib> #in ...

  4. 牛客练习赛22 C 简单瞎搞题

    //位运算 // & 都是1 才是 1 // | 都是0 才是0 // ^ 不一样才是1 #include <iostream> #include <cstdio> # ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 用crontab执行shell把top命令按日期追加到文件

    用crontab执行shell把top命令按日期追加到文件 详细图文解说请到本人原创百度经验http://jingyan.baidu.com/article/3052f5a1daf11197f21f8 ...

  2. 2016NOI冬令营day1

    感冒了!!!: ( 上午听 picks 讲多项式导论(所有内容均不考)只听懂了那个O(n1.585)的多项式乘法算法 : ( 安装好了弹幕!太厉害了(有电脑的都在刷弹幕) :  ( 中午吃的不错 : ...

  3. C/C++之extern "C"的用法解析

    extern "C"的用法解析 http://blog.sina.com.cn/u/494a1ebc010004g5 C++中extern “C”含义深层探索 1.引言 C++语言 ...

  4. MongoDB ----基于分布式文件存储的数据库

    参考: http://www.cnblogs.com/huangxincheng/category/355399.html http://www.cnblogs.com/daizhj/category ...

  5. selinux配置错误实例介绍

    错误原因 配置关闭SELinux,结果误操作 应修改配置文件/etc/selinux/config中的“SELINUX”参数的值, # SELINUX=enforcing  原始配置 SELINUX= ...

  6. Linux Touch命令的8种使用技巧

    Linux touch命令不仅可以用于在Linux上创建空文件. 您可以使用它来更改现有文件的时间戳,包括其访问权限和修改时间. 本文介绍了8种可以通过Linux终端使用touch命令的方案. 我们在 ...

  7. SNMP学习笔记之Linux服务器SNMP常用OID

    收集整理一些Linux下snmp常用的OID,用做服务器监控很不错. 应用示例 查看服务器1分钟平均负载: snmpwalk -v1 -c public 127.0.0.1 .1.3.6.1.4.1. ...

  8. Python网络爬虫案例(二)——爬取招聘信息网站

    利用Python,爬取 51job 上面有关于 IT行业 的招聘信息 版权声明:未经博主授权,内容严禁分享转载 案例代码: # __author : "J" # date : 20 ...

  9. 20145313张雪纯Exp8 Web基础

    回答问题 (1)什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域:包含了文本框. ...

  10. linux内核分析 第18章读书笔记

    十八章 调试 一.内核调试概述 1.需要面对的 一个确定的bug 一个藏匿bug的内核版本 相关的内核代码的知识和运气 2.艰难的调试工作 重现bug很困难:大部分bug通常都不是行为可靠而且定义明确 ...