【进制】招待
时间:2019-09-22
本文章向大家介绍【进制】招待,主要包括【进制】招待使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
招待
题目描述
请了两位奆老来为自己种树,小X也稍稍有些不好意思了,于是他准备了一些零食和饮料来招待奆老们。
然而,小X有强迫症,他希望自己和好基友们所有的零食和饮料的质量都要完全相同。
由于小X是一个奆老,所以他看不起普通商店里卖的电子秤,他决定自己做一个。
他的称重工具是一架由金子制成的天平,这架天平的精度非常高,可以达到纳克的标准,1g=109ng,小X会把物品放在天平的右侧,然后在天平的左侧和右侧都放上一些砝码,直至天平平衡。该天平的砝码是用钻石制成的,每个砝码的质量依次为1ng、3ng、9ng、27ng、81ng……,每个砝码的质量都是3的幂次(如3的6次幂表示为3^6=729),且各不相同。
由于小X是一个奆老,他有对各个物品未卜先知的能力,他会告诉你他的物品的质量,希望你给他一个方案,使得天平的两侧平衡。
然而,小X有强迫症,他希望自己和好基友们所有的零食和饮料的质量都要完全相同。
由于小X是一个奆老,所以他看不起普通商店里卖的电子秤,他决定自己做一个。
他的称重工具是一架由金子制成的天平,这架天平的精度非常高,可以达到纳克的标准,1g=109ng,小X会把物品放在天平的右侧,然后在天平的左侧和右侧都放上一些砝码,直至天平平衡。该天平的砝码是用钻石制成的,每个砝码的质量依次为1ng、3ng、9ng、27ng、81ng……,每个砝码的质量都是3的幂次(如3的6次幂表示为3^6=729),且各不相同。
由于小X是一个奆老,他有对各个物品未卜先知的能力,他会告诉你他的物品的质量,希望你给他一个方案,使得天平的两侧平衡。
输入
输入数据仅有一行包含一个正整数W,表示小X给出的物品的质量,重量单位是纳克(ng)
输出
输出数据共有两行,分别输出左右两端各个砝码及物体的质量,同一行砝码重量必须从小到大排序后按次序输出,第二行的第一个数必须先输出物体的质量,然后才是各个砝码的重量。相邻两个数之间必须严格用一个空格隔开。
注意:输入数据保证一定有解!如有多组解,输出任意一组即可!
注意:输入数据保证一定有解!如有多组解,输出任意一组即可!
样例输入
67
样例输出
1 3 9 81
67 27
提示
小X给出的物品的质量为67pg,你可以在天平的左边放上4个砝码,重量依次为1,3,9,81总重量94ng,而右边放一个砝码质量为27ng,加上物体的重量67ng,恰好也是94ng,满足题目要求,此时天平的左右两端平衡。
对于20%的数据,W<=100
对于另外20%的数据,W<=10000,最多只用到5个砝码
对于另外20%的数据,W<=1000000,所有砝码都放在左边
对于另外20%的数据,W<=1000000
对于100%的数据,W<=1e15。
【题解】
这个题目非常有价值,考察的是三进制的使用,如果把k进行三进制转化,然后
1、如果当前为0,则不用管。
2、如果当前为1,则在 物品 对面放 当前位置权重的砝码
3、如果当前为2,则在 物品 自己的放当前权重的砝码,同时 需要进位。
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N = 1000; 5 ll A[N],B[N]; 6 int a[N]; 7 int cnt = 0 , n , m ; 8 int main() 9 { 10 ios_base :: sync_with_stdio(false); 11 cin.tie(NULL) , cout.tie(NULL) ; 12 ll w ; 13 ll p[N]; 14 cin >> w ; 15 if( w == 2 ){ 16 printf("3\n2 1\n"); 17 return 0; 18 } 19 20 p[0] = 1 ; 21 for( int i = 1 ; i <= 33 ; i ++ ){ 22 p[i] = p[i-1] * 3 ; 23 } 24 B[m++] = w ; 25 26 while( w ){ 27 a[cnt++] = w % 3 ; 28 w /= 3 ; 29 } 30 31 for( int i = 0 ; i <= 33 ; i++ ){ 32 if( a[i] == 0 ){ 33 continue ; 34 }else if( a[i] == 1 ){ 35 A[n++] = p[i] ; 36 }else{ 37 B[m++] = p[i] ; 38 a[i] ++ ; 39 int carry = 1 ; 40 for( int j = i + 1 ; j <= 33 ; j++ ){ 41 a[j] += carry ; 42 if( a[j] == 3 ){ 43 a[j] = 0 ; 44 carry = 1 ; 45 }else{ 46 break ; 47 } 48 } 49 } 50 } 51 for( int i = 0 ; i < n ; i ++ ){ 52 printf("%lld%c",A[i],i==n-1?'\n':' '); 53 } 54 for( int i = 0 ; i < m ; i++ ){ 55 printf("%lld%c",B[i],i==m-1?'\n':' '); 56 } 57 return 0; 58 }
原文地址:https://www.cnblogs.com/Osea/p/11569302.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 深度学习之卷积神经网络(CNN)的应用-验证码的生成与识别
- struts2的验证
- 强化学习详解与代码实现
- Spring源码学习笔记(5)——@Conditonal注解
- 你好,CloudBase CLI 1.0
- Spring源码学习笔记(6)——REST服务的拦截
- Spring源码学习笔记(7)——使用@Import导入组件
- 深度强化学习(DQN-Deep Q Network)之应用-Flappy Bird
- Could not load driverClass ${jdbc.driver}
- Js通过值获取索引下标
- Spring源码学习笔记(8)——Bean的生命周期
- hibernate系列之一
- Flutter定义tabbar底部导航路由跳转
- hibernate系列之二
- Flutter配置路由组件抽离及页面传参