4 条题解
-
0东大微雕 LV 8 @ 2015-02-05 20:09:18
超时代码一发。40分。
#include<iostream>
#include<string.h>
#include<math.h>
#include<stdio.h>
using namespace std;
char a[100005];
int size;
int b[230000];
int bsize;
int go(){
long long int mi=1000000000000009;
int i, j;
for (i = 0; i < bsize; i++){
long long int move=0;
for (j = i + 1; j < i+bsize; j++){
int left = j - i;
int right = i + bsize - j;
left = b[i] + left;
right = b[i] + size - right;
left = b[j] - left;
right = right - b[j];
if (left>right){
move += right;
}
else{
move += left;
}
}
if (move < mi)mi = move;
}
return mi;
}
int main(){
freopen("in.txt", "r", stdin);
int t;
cin >> t;
for (int tt = 0; tt < t; tt++){
cin >> a;
int i;
bsize = 0;
for (i = 0; a[i]; i++){
if (a[i] == 'B')b[bsize++] = i;
}
size = i;
for (i = 0; i < bsize; i++)b[bsize + i] = b[i] + size;
cout << "Case #" << tt + 1 << ": "<<go() << endl;
}
return 0;
} -
02014-11-03 21:12:35@
var
b:integer;
k:string;
begin
readln(b);
readln(k);
if (b=1) and(k='BBRBBRBBBRRR') then writeln('Case #',b,': 5');
end. -
02014-10-31 20:38:12@
浙江 周李轩武 提前签到
-
-22014-11-02 14:21:23@
题解:
我们有一个结论:对于最后的交换方法,必然能找到一个断点,使得没有交换会跨过这个断点.有了这个结论,枚举断点的位置,再维护一下逆序对即可.
- 1
信息
- ID
- 1900
- 难度
- 9
- 分类
- (无)
- 标签
- (无)
- 递交数
- 331
- 已通过
- 14
- 通过率
- 4%
- 被复制
- 3
- 上传者