码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 5676(stl 或 深搜)

时间:2016-05-01 14:54:39      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:

学习:

  字符串的下一个排列,字符串的大小比较。strcmp; 

stl:

  

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
char c[50],b[50];
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%s",b);
        int len = strlen(b);

        if(len & 1){
            len = (len + 1) / 2;
            for(int i = 0 ; i < len ; i ++) printf("4");
            for(int i = len ; i < 2 * len ; i ++) printf("7");
            printf("\n");
        }else{
            memset(c,0,sizeof(c));
            for(int i = 0 ; i < len / 2 ; i ++) c[i] = ‘4‘;
            for(int i = len / 2 ; i < len ; i ++) c[i] = ‘7‘;
            bool f = true;
            do{
                if(strcmp(c,b) >= 0){
                    f = false;
                    printf("%s\n",c);
                    break;
                }
            }while(next_permutation(c,c+len));
            if(f){
                for(int i = 0 ; i < (len+2) / 2 ; i ++) printf("4");
                for(int i = (len+2) / 2 ; i < len+2 ; i ++) printf("7");
                printf("\n");
            }
        }
    }
    return 0;
}

按位dfs: 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 
 5 ll n;
 6 bool f;
 7 int calc(ll x){
 8     int cnt = 0;
 9     while(x){
10         cnt ++;
11         x /= 10;
12     }
13     return cnt;
14 }
15 
16 void dfs(ll now,int lx,int ly){
17     if(f) return;
18  //   cout << "now :" << now << "   " << lx << "   "  << ly << endl;
19     if(now >= n && lx == 0 && ly == 0){
20         printf("%lld\n",now);
21         f = true;
22         return;
23     }
24     if(lx) dfs(now*10+4,lx-1,ly);
25     if(ly) dfs(now*10+7,lx,ly-1);
26     return ;
27 }
28 
29 int main(){
30 
31     int T;
32     scanf("%d",&T);
33     while(T--){
34         scanf("%lld",&n);
35         int len = calc(n);
36         if(len & 1) len ++;
37         if(!n) printf("47\n");
38         if(!n) continue;
39         if(len >= 20){
40             for(int i = 0 ; i < len/2 ; i ++) printf("4");
41             for(int i = 0 ; i < len/2 ; i ++) printf("7");
42             printf("\n");
43         }else{
44             f = false;
45             dfs(0,len >> 1,len >> 1);           // 4和7数量相等
46             if(!f){
47                 for(int i = 0 ; i < (len+2)/2 ; i ++) printf("4");
48                 for(int i = 0 ; i < (len+2)/2 ; i ++) printf("7");
49                 printf("\n");
50             }
51         }
52     }
53     return 0;
54 }

 

hdu 5676(stl 或 深搜)

标签:

原文地址:http://www.cnblogs.com/zstu-jack/p/5450458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!