CF#660 B - Captain Flint and a Long Voyage
题意:给一个数字n,要求n位数的十进制数r转化为二进制数k删掉末位的n位后最大,如果有多个正解,取最小的那个。
题解:k要最大所以k的每个位为8或9。(1000)2 ,(1001)2.要删掉的话,8和9都没有区别。要最小,所以涉及到被删就是8。所以要 (n-1)/4+1 个8,n-((n-1)/4+1) 个9.
输入样例:
2 1 3
输出样例:
8 998
代码:
#include <iostream> #include <cstdio> using namespace std; int main() { int n; cin >> n; while (n--) { int x, y, t; cin >> t; x = t - ((t - 1) / 4 + 1); y = ((t - 1) / 4 + 1); for (int i = 0; i < x; i++)cout << "9"; for (int i = 0; i < y; i++)cout << "8"; cout << endl; } return 0; }

浙公网安备 33010602011771号