J. Breakfast
题目描述🥰

AC代码🧠
void solve() {
int n, m;
// cin >> n >> m;
printf("%.2lf", 0.6 * 32 + 1.0 * 20);
}
D. nIM gAME
题目描述🥰

题目思路😀
打表可知无论brz如何拿取,brz都不可能获胜。
AC代码🧠
void solve() {
int n;
cin >> n;
cout << "lose" << endl;
}
A. Paper Watering
题目描述🥰

题目思路😀
首先对于开平方的数,肯定是不会存在重复的可能,所以我们对于不等于1的x,答案至少肯定是k+1,然后我们就可以模拟向下开根的过程,并在过程中统计答案。
Tips:对于n等于1的情况需要进行特判,因为无论是开方还是平方,结果都是1,所以直接特判即可。
AC代码🧠
void solve() {
int n, k;
cin >> n >> k;
if(n == 1){
cout << 1 <<endl;
return;
}
int ans = k + 1;
int x = n, t = 0;
while (x > 1 && t < k) {
int y = x;
x = sqrt(x);
t++, ans++;
if (x * x != y && x != 1) ans += (k - t);
}
cout << ans << endl;
}
Problem E. Checksum
题目描述🥰

题目思路😀
我们需要枚举b串里面的1的个数,对于每一个对应的D进行检验是否有合法的b存在即可
不过debug时间确实太长了😭
AC代码🧠
void solve() {
int n, k;
string s;
cin >> n >> k >> s;
int res = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '1') res++;
}
auto check = [&](int cnt) -> bool {
// 总共这个d是 cnt+res
string str;
int sb = res + cnt;
while (sb) {
str += (char)(sb % 2 + '0');
sb /= 2;
}
str = str.substr(0, k);
reverse(str.begin(), str.end());
int st = 0;
for (auto x : str)
if (x == '1') st++;
if (st != cnt) return false;
// cout << str << endl;
int sum = 0;
for (int i = 0; i < str.size(); i++) sum += pow(2, i) * (str[i] - '0');
string a(k, '0'), b(k, '0');
for (int i = 0; i < min(cnt, (int)(a.size() - 1)); i++) a[i] = '1';
int l = 0;
// cout << a << endl;
for (int i = 0; i < a.size(); i++) l += pow(2, i) * (a[i] - '0');
for (int i = max((int)(a.size() - 1 - cnt + 1), 0LL); i < a.size(); i++)
b[i] = '1';
int r = 0;
// cout << b << endl;
for (int i = 0; i < b.size(); i++) r += pow(2, i) * (b[i] - '0');
if (sum >= l && sum <= r) return true;
return false;
};
bool vis = false;
int t = 0;
for (int i = 0; i < k; i++) {
if (check(i)) {
vis = true;
t = i + res;
break;
}
}
if (vis) {
string ans;
while (t) {
ans += (char)(t % 2 + '0');
t /= 2;
}
ans = ans.substr(0, k);
while (ans.size() < k) {
ans += "0";
}
reverse(ans.begin(), ans.end());
cout << ans << endl;
} else
cout << "None" << endl;
}
posted on
浙公网安备 33010602011771号