NC214949. 牛牛的反函数
描述
输入描述
第一行输入一个正整数表示有T组测试案例,对于每组案例:
输入一行一个正整数y,代表函数值。
输出描述
对于每组案例,输出一行一个整数代表问题的答案。
如果在不存在任意一个正整数的函数值等于给定的y,请输出"-1"。
否则请输出任意的x满足条件F(x)=y。要求x的范围在内。
示例1
输入:
11 1 2 3 4 5 6 7 8 9 10 1024
输出:
1 2 4 8 16 32 64 128 256 512 -1
Python3(3.9) 解法, 执行用时: 29ms, 内存消耗: 3964K, 提交时间: 2020-12-31 22:15:34
mx = int('1'+'0'*18) def work(): global mx x = 1; y = int(input()) - 1 while y: if x ==1 or x == 2: x <<= 1 else: if x&1: x <<= 1 else: x -= 1 y -= 1 if x>mx: print(-1) return print(x) t = int(input()) exec('work();'*t)
C++(clang++11) 解法, 执行用时: 3ms, 内存消耗: 352K, 提交时间: 2021-01-22 18:52:09
#include<bits/stdc++.h> using namespace std; long long start=(1LL<<59)+1,ans[123],t,y; int main() { for(int i=120;i;i--) { ans[i]=start; if(start%2==1) start++; else start/=2; } for(cin>>t;t--;) { cin>>y; cout<<(y<=120?ans[y]:-1LL)<<"\n"; } }