记2015.4.11 刷BestCoder 第一题 死亡 在 路上

 
 
 1 #include<cstdio>
 2 char a[101];
 3 int T;
 4 bool is(){
 5     char *f, *e;
 6     f = a;
 7     e = a + T - 1;
 8     for( ; f<e; f++,e-- )
 9         if( *f!=*e ) return false;
10     return true;
11 }
12 bool cmp(){
13     char *f, *e;
14     f = a;
15     e = a + T - 1;
16     for( ; f<e; f++,e-- )
17         if( *f=='?'||*e=='?' ) ;
18         else { if( *f!=*e ) return true; }
19     return false;
20 }
21 void change(){
22     if( T%2==0 ) return;
23     if( *(a+T/2)=='?' ) *(a+T/2)='a';
24     return ;
25 }
26 bool T_T(){
27     bool flag = false;
28     char *f, *e;
29     change ();
30     if( is() ){
31         f = a;
32         e = a + T - 1;
33         for( ; e>f; e--, f++ ){
34             if( *e=='?' ) {
35                 flag = true;
36                 *e = 'b';
37                 *f = 'a';
38                 break;
39             }
40         }
41         for( ; f<=e; f++, e-- ){
42             if( *f=='?' ) {
43                 *f = *e = 'a';
44             }
45         }
46         return flag;
47     }
48 
49     if( cmp() ){
50         f = a;
51         e = a + T - 1;
52         for( ; f<=e; f++, e-- ){
53             if( *f=='?' ) *f = 'a';
54             if( *e=='?' ) *e = 'a';
55         }
56         return true;
57     }
58 
59     f = a;
60     e = a + T - 1;
61     for( ; e>f; e--, f++ )
62         if( *e=='?' ) {
63             if( *f=='?' ){ *e = 'b';*f=='a'; }
64             else if( *f=='a' ) *e = 'b';
65             break;
66         }
67     if( e<=f ){
68         if( T%2==0 ) { f=a+T/2-1; e = a + T/2; }
69         else {f = a+T/2-1;e = a + T/2 +1;}
70         for( ; *e; e++, f-- ){
71             if( *f=='?' ) {
72                 if( *e=='a' ){ *f='b'; }
73                 else  *f = 'a';
74                 break;
75             }
76         }
77     }
78     f = a;
79     e = a + T - 1;
80     for( ; f<=e; f++, e-- ){
81         if( *f=='?' ) *f = 'a';
82         if( *e=='?' ) *e = 'a';
83     }
84     return !is();
85 
86 }
87 int main(){
88     while( scanf( "%d", &T ) ){
89         getchar();
90         gets( a );
91         if( T_T() ) puts( a );
92         else puts( "QwQ" );
93     }
94     return 0;
95 }
View Code

自己有好多毛病;

这道题2个小时没有A;

是因为自己思索不够;

条例不公清晰。

下一次,我要列算法过程

 

posted on 2015-04-12 08:28  代码改变一切  阅读(87)  评论(0)    收藏  举报

导航