tabris实在是太穷了,为了发财,tabris去买了一张彩票,幸运地中了特别奖。
特别奖是这样的,不会直接给你发钱.会给你一串二进制数s,让你在s中选择一个不大于k的区间,这个区间表示的数就是获奖者的奖金数目. tabris中奖之后已经激动地蒙圈了,他不知道如何选择能获得最多的钱,你能帮帮他不? 输入描述: 输入一个整数T(T≤10),代表有T组数据. 每组数据占两行. 第一行有一个整数K(k≤60),代表tabris能选择的数字区间的大小. 第二行有一个字符串s(∣s∣≤106). 保证 k≤∣s∣ 输出描述: 输出一行”Case #x: y”,x代表第x组数据,y代表tabris能得到的最多的钱。输入:
3 1 10101 3 10101 5 10101 输出: Case #1: 1 Case #2: 5 Case #3: 21#include#include #include using namespace std;unsigned long bin2dec(string s){ bitset<32> bit(s); return bit.to_ulong();}int main(){ int T; int max[11] = { 0}; cin >> T; for (int j = 1; j <= T; j++){ int k; string s; cin >> k >> s; max[j] = 0; int n = s.length() - k - 1; n = n <= 0 ? 1 : n; for (int i = 0; i < n; i++){ unsigned t; string temp = s.substr(i, k); t = bin2dec(temp); if (t > max[j]){ max[j] = t; } } } for (int i = 1; i <= T; i++){ cout << "Case #" << i << ": " << max[i] << endl; } return 0;}
这个为啥不过啊,唉