Pagini recente » Cod sursa (job #3272797) | Cod sursa (job #3031094) | Cod sursa (job #2269422) | Cod sursa (job #1850349) | Cod sursa (job #651155)
Cod sursa(job #651155)
#include <stdio.h>
#include <string.h>
#define MAX 501
const char* file_in = "palm.in";
const char* file_out = "palm.out";
char s[MAX];
int lft[MAX];
int right[MAX];
int N;
int min(int a,int b){
return a < b?a:b;
}
void readInput(){
FILE *f = fopen(file_in,"r");
fgets(s,MAX,f);
N = strlen(s) - 1;
// printf("%d %s\n",N,s);
}
void preproces(){
lft[0] = 1; right[N -1] = 1;
for (int i = 1 ; i < N; i++)
if (s[i - 1] <= s[i]) lft[i] = lft[i - 1] + 1;
else lft[i] = 1;
for (int i = N - 2 ; i >= 0; i--)
if (s[i] >= s[i + 1]) right[i] = right[i + 1] + 1;
else right[i] = 1;
}
void solve(){
int k,count,max = 1;
for (int i = 0 ; i < N; i++){
int ii,jj;
ii = jj = i;
k = min(lft[i],right[i]);
count = 0;
while (ii >= 0 && jj < N && k >0){
if(s[ii] == s[jj]) count++;
else break;
k--;
ii--;
jj++;
}
if (max < count * 2 - 1) max = count * 2 - 1;
}
for (int i = 0 ; i < N - 1; i++){
int ii,jj;
ii = i;
jj = i + 1;
k = min(lft[i],right[i + 1]);
count = 0;
while (ii >= 0 && jj < N && k >0){
if(s[ii] == s[jj]) count++;
else break;
k--;
ii--;
jj++;
}
if (max < count * 2) max = count * 2;
}
FILE * f = fopen(file_out,"w");
fprintf(f,"%d",max);
printf("Sol %d\n",max);
fclose(f);
}
void print_vec(int v[MAX], int size){
for (int i = 0 ; i < N; i++)
printf("%d ", v[i]);
printf("\n");
}
int main(){
// printf("input file! %s\n",file_in);
readInput();
preproces();
solve();
// print_vec(lft,N);
// print_vec(right,N);
return 0;
}