NC205456. L1-7拼接梯子
描述
输入描述
两个用空格隔开的正整数 k, L,表示 kcxz 拥有的材料数量以及 StarrySky 想要的梯子长度。
输出描述
如果能用这 k 段材料拼接出长度为 L 的梯子,则输出 "Yes"(不含引号),并在第二行输出一个正整数,表示选择的最长材料的长度,否则输出 "No"(不含引号)。
示例1
输入:
3 10
输出:
Yes 8
说明:
选择 这两段材料即可拼接出长度为 10 的梯子,其中最长的材料长度为 .C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 380K, 提交时间: 2020-09-25 19:53:29
#include<bits/stdc++.h> using namespace std; #define ll long long int main() { ll n,l; cin>>n>>l; if(l&1) { cout<<"No"; return 0; } int x=0; while(l) { l/=2; x++; } if(n+1<x) cout<<"No"; else cout<<"Yes"<<endl<<(ll)pow((ll)2,x-1); }
C++(clang++11) 解法, 执行用时: 12ms, 内存消耗: 480K, 提交时间: 2021-05-06 12:56:09
#include <bits/stdc++.h> int main() { long long k,l,i,one=1; scanf("%lld%lld",&k,&l); for(i=60;i>=0;i--) if((one<<i)&l) break; if(i>k||l&1) printf("No\n"); else printf("Yes\n%lld",one<<i); }
Python3(3.5.2) 解法, 执行用时: 26ms, 内存消耗: 3536K, 提交时间: 2020-05-03 15:50:18
import math k,l=map(int,input().split(' ')) if l<=2**(k+1)-2 and l%2==0: print("Yes") print(2**int(math.log(l,2))) else: print("No")