社区讨论
如何O(n)
P14258好感(favor)参与者 7已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mhj0zut2
- 此快照首次捕获于
- 2025/11/03 18:57 4 个月前
- 此快照最后确认于
- 2025/11/03 18:57 4 个月前
赛时代码:
CPP#include <bits/stdc++.h>
using namespace std;
long long int T,n,ans1,ans2;
string s,a,b;
int main()
{
cin.tie( 0 );
cout.tie( 0 );
ios::sync_with_stdio( false );
cin >> T;
while( T -- )
{
cin >> n;
cin >> s;
a = s;
b = s;
ans1 = 0;
ans2 = 0;
for ( long long int i = n - 1 ; i >= 0 ; i -- )
{
if ( a[0] == '1' )
{
a[0] = '0';
ans1 ++;
}
if ( b[0] == '0' )
{
b[0] = '1';
ans2 ++;
}
if ( a[i] == '1' )
{
a[i] = '0';
a = a.substr( 1 , i ) + a[0] + a.substr( i + 1 );
ans1 += i + 1;
}
if ( b[i] == '0' )
{
b[i] = '1';
b = b.substr( 1 , i ) + b[0] + b.substr( i + 1 );
ans2 += i + 1;
}
}
cout << min( ans1 , ans2 ) << '\n';
}
return 0;
}
因为substr是O(n),所以总体O(n^2)。正解应该是用O(1)插入
回复
共 7 条回复,欢迎继续交流。
正在加载回复...