| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
这题就是二次dp,可以AC,附代妈In Reply To:不是二次dp ? 一次正向得到最小,一次反向是前面的最大,为什么就wa了? Posted by:achilles at 2005-09-09 09:58:00 注意:要字符串比较!!!不能用整形,long long也不行,会溢出导致OLE!!!
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char str[100];
int compare(int start1, int end1, int start2, int end2){
if(start1 == start2 && end1 == end2) return 0;
while(start1 <= end1 && str[start1] == '0') start1++;
while(start2 <= end2 && str[start2] == '0') start2++;
int len1 = end1-start1+1, len2 = end2-start2+1;
if(len1 > len2) return 1;
if(len1 < len2) return -1;
for(int i = 0; i < len1; i++){
if(str[start1+i] > str[start2+i]) return 1;
if(str[start1+i] < str[start2+i]) return -1;
}
return 0;
}
int main() {
while(1){
scanf("%s", str);
int l = strlen(str);
if(l == 1 && str[0] == '0') break;
int minpos[100];
minpos[0] = 0;
for(int i = 1; i < l; i++){
bool set = 0;
for(int j = i; j > 0; j--){
if(compare(j, i, minpos[j-1], j-1) == 1){
set = 1;
minpos[i] = j;
break;
}
}
if(!set) minpos[i] = 0;
}
//cout << minpos[l-1] << endl;
int mark = l-1;
bool ok[100] = {0};
int maxpos[100];
for(; mark >= 0; mark--){
int cmpr = compare(mark, l-1, minpos[l-1], l-1);
if(cmpr == -1){
ok[mark] = 0;
continue;
}
else if(cmpr == 0){
ok[mark] = 1;
maxpos[mark] = l-1;
}
else{
break;
}
}
for(int j = mark; j >= 0; j--){
for(int k = j; k < l; k++){
if(!ok[k+1]) continue;
int cmpr = compare(j, k, k+1, maxpos[k+1]);
if(cmpr == -1){
ok[j] = 1;
maxpos[j] = k;
}
}
}
int offset = 0;
while(offset < l){
int newOffset = maxpos[offset];
for(int j = offset; j <= newOffset; j++) printf("%c", str[j]);
if(newOffset != l-1) printf(",");
offset = newOffset+1;
}
printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator