CodeForce 339:A+B+C

A题:水题。。

 1 #include<stdio.h>
 2 #include<string.h>
 3 const int maxn = 1005;
 4 char s[ maxn ];
 5 int main(){
 6     //freopen("in.txt","r",stdin);
 7     while( scanf("%s",s)!=EOF ){
 8         int len = strlen(s);
 9         int c1 = 0,c2 = 0,c3 = 0;
10         for( int i=0;i<len;i++ ){
11             if( s[i]=='1' ) c1++;
12             if( s[i]=='2' ) c2++;
13             if( s[i]=='3' ) c3++;
14         }
15         int sum = c1+c2+c3;
16         if( sum==1 ){
17             printf("%s\n",s);
18             continue;
19         }
20         for( int i=0;i<sum;i++ ){
21             if( i==0 ){
22                 if( c1 ) printf("1"),c1--;
23                 else if( c2 ) printf("2"),c2--;
24                 else if( c3 ) printf("3"),c3--;
25             }
26             else{
27                 if( c1 ) printf("+1"),c1--;
28                 else if( c2 ) printf("+2"),c2--;
29                 else if( c3 ) printf("+3"),c3--;
30             }
31         } 
32         printf("\n");
33     }
34     return 0;
35 }
View Code

B题:还是水题。。模拟。。

 1 #include<stdio.h>
 2 const int maxn = 100005;
 3 typedef long long LL;
 4 LL a[ maxn ];
 5 int main(){
 6     int n,m;
 7     //freopen("in.txt","r",stdin);
 8     while( scanf("%d%d",&n,&m)==2 ){
 9         for( int i=1;i<=m;i++ ){
10             scanf("%I64d",&a[i]);
11         }
12         LL sum = 0;
13         for( int i=1;i<=m;i++ ){
14             if( i==1 ){
15                 sum += a[i]-1;
16             }
17             else {
18                 if( a[i]>=a[i-1] ) sum += (a[i]-a[i-1]);
19                 else sum += (n+a[i]-a[i-1]);
20             }
21         }
22         printf("%I64d\n",sum);
23     }
24     return 0;
25 }
View Code

C题:简单的DFS,满足两个条件即可。。。

题意别理解错!!!!!!!!!!!!!!!!!

 1 #include<stdio.h>
 2 #include<string.h>
 3 const int maxn = 1005;
 4 int ans[ maxn ];
 5 //int cnt ;
 6 char str[ maxn ];
 7 int m;
 8 bool ok;
 9 
10 void dfs( int L,int R,int sL,int sR,int cnt ){
11     if( cnt==m&&ok==false ){
12         ok = true;
13         return ;
14     }
15     if( ok==true ) return ;
16     for( int i=0;str[i]!='\0';i++ ){
17         if( str[i]=='1' ){
18             if( cnt%2==0&&((i+1)!=R)&&(sL+i+1>sR) ){
19                 ans[ cnt ] = i+1;
20                 dfs( i+1,R,sL+i+1,sR,cnt+1 );
21             }
22             if( ok==true ) return ;
23             if( cnt%2==1&&((i+1)!=L)&&(sR+i+1>sL) ){
24                 ans[ cnt ] = i+1;
25                 dfs( L,i+1,sL,sR+i+1,cnt+1 );
26             }
27             if( ok==true ) return ;
28         }
29     }
30     return;
31 }
32 
33 
34 int main(){
35     //freopen("in.txt","r",stdin);
36         scanf("%s%d",str,&m);
37         ok = false;
38         if( m==1 ){
39             for( int i=0;str[i]!='\0';i++ ){
40                 if( str[i]=='1' ){
41                     ok = true;
42                     printf("YES\n%d\n",i+1);
43                     break;
44                 }
45             }
46             if( ok==false ) printf("NO\n");
47             return 0;
48         }
49         ok = false;
50         dfs( 0,0,0,0,0 );
51         if( ok==true ){
52             puts("YES");
53             for( int i=0;i<m;i++ ){
54                 if( i==0 ) printf("%d",ans[i]);
55                 else printf(" %d",ans[i]);
56             }
57             printf("\n");
58         }
59         else puts("NO");
60     
61     return 0;
62 }
View Code

 

posted @ 2013-08-28 23:46  xxx0624  阅读(312)  评论(0编辑  收藏  举报