2024.12.29 周日
1.2025.2.19——15002.11.23 周六3.11.24 周日4.11.25 周一日常5.2024.11.26 周二日常6.2024.11.27 周三7.2024.11.28周四8.2024.11.29 周五9.2024.11.30 周六10.2024.12.1 周日11.2024.12.2 周一12.2024.12.3 周二13.2024.12.4 周三14.2024.12.5 周四15.2024.12.7 周六16.2024.12.8 周日17.2024.12.9 周一18.2024.12.10 周二19.2024.12.11 周三20.2024.12.12 周四21.2024.12.13 周五22.2024.12.14 周六23.2024.12.16 周一24.2024.12.17 周二25.2024.12.18 周三26.2024.12.19 周四27.2024.12.20 周五28.2024.12.21 周六29.2024.12.22 周日30.2024.12.23 周一31.2024.12.24 周四32.2024.12.25 周三33.2024.12.26 周四34.2024.12.27 周五35.2024.12.28 周六
36.2024.12.29 周日
37.2024.12.30 周一38.2025.1.5——120039.2025.1.12——120040.2025.1.14——120041.2025.1.15——120042.2025.1.16——120043.2025.1.17——120044.2025.1.18——130045.2025.1.19——130046.2025.1.20——130047.2025.1.21——130048.2025.1.22——130049.2025.1.24——140050.2025.1.26——140051.2025.2.8——140052.2025.2.9——140053.2025.2.10——140054.2025.2.14——140055.2025.2.15——140056.2025.2.17——14002024.12.29 周日
Q1. 1100
You are given a number in binary representation consisting of exactly
Let's fix some integer
Please note that for each
------------------------独自思考分割线------------------------
-
递推思想。 对于每个答案单独快速计算太难,考虑递推。
A1.
- 题意:给定一个01串代表的二进制的正整数。每次操作可交换相邻字母。问对于每一个
,输出最小的操作次数使得原字符串对应的二进制数是 的倍数。 - 对于每个答案单独快速计算太难,考虑递推。
- 最优操作次数就是将 1 与高位最近的 0 交换。本质就是快速找到高位最近的 0。
- 考虑指针维护。wa2发是因为代码没有保证高位。
- 维护有2种方法,1好理解,可以证明2也是对的。
------------------------代码分割线------------------------
A1.
#include <bits/stdc++.h>
#define int long long //
#define endl '\n' // 交互/调试 关
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
void _();
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << fixed << setprecision(6);
int T = 1;
cin >> T;
while (T--)
_();
return 0;
}
void _()
{
int n;
cin >> n;
string s;
cin >> s;
reverse(s.begin(), s.end());
s = ' ' + s + ' ';
int f = 0, id = 2;
auto find = [&](int st)
{
while (1)
{
for (; id <= n && s[id] == '1'; id++)
;
if (id > st)
break;
else
id++;
}
};
for (int i = 1; i <= n; i++)
{
if (s[i] - '0')
{
find(i);
if (id > n)
f = -1;
else
{
// bug2(i, id);
// bug(s);
swap(s[i], s[id]);
f += id - i;
}
}
cout << f << ' ';
}
cout << endl;
}
A1
#include <bits/stdc++.h>
#define int long long //
#define endl '\n' // 交互/调试 关
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
void _();
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << fixed << setprecision(6);
int T = 1;
cin >> T;
while (T--)
_();
return 0;
}
void _()
{
int n;
cin >> n;
string s;
cin >> s;
reverse(s.begin(), s.end());
s = '0' + s;
int res = 0;
int idx = 1;
bool ok = 1;
vector<int> f(n + 1);
for (int i = 1; i <= n; i++, idx++)
if (!ok)
f[i] = -1;
else
{
if (s[i] == '0')
f[i] = f[i - 1];
else
{
for (; idx <= n && s[idx] == '1'; idx++)
;
if (idx > n)
{
ok = 0;
f[i] = -1;
}
else
{
// bug2(i, idx);
f[i] = f[i - 1] + idx - i;
swap(s[i], s[idx]);
}
}
}
for (int i = 1; i <= n; i++)
cout << f[i] << ' ';
cout << endl;
}
---
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!