• 【hdu 6351】Beautiful Now


    【链接】 我是链接,点我呀:)
    【题意】

    你可以最多交换k次数字。 让你组成一个最大的和一个最小的数字。

    【题解】

    直接写个bfs.求出所有状态的最小交换次数。 但是最大值和最小值分开写。 做最大值的时候。 假设要交换x[i],x[j] (ix[j]才交换。 加上这个优化就能过了。 直接输出最小值和最大值就ok了。

    【代码】

    #include <bits/stdc++.h>
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define all(x) x.begin(),x.end()
    #define pb push_back
    #define lson l,mid,rt<<1
    #define rei(x) scanf("%d",&x)
    #define rel(x) scanf("%lld",&x)
    #define res(x) scanf("%s",x)
    #define rson mid+1,r,rt<<1|1
    using namespace std;
    
    const double pi = acos(-1);
    const int dx[4] = {0,0,1,-1};
    const int dy[4] = {1,-1,0,0};
    const int M = 40e4;
    
    int k,len,xx[15];
    string s,ss;
    map<int,int> mmap;
    int h,t,dl[M+10];
    
    int _change(string x){
        int len = x.size();
        int xx = 0;
        for (int i = 0;i < len;i++){
            xx = xx*10 + (x[i]-'0');
        }
        return xx;
    }
    
    int _change(int xx[15]){
        int x = 0;
        for (int i = 1;i <= len;i++){
            x = x*10 + xx[i];
        }
        return x;
    }
    
    void _swap(int &x,int &y){
        int t = x;x = y;y = t;
    }
    
    int main(){
        #ifdef LOCAL_DEFINE
            freopen("rush_in.txt", "r", stdin);
        #endif
        ios::sync_with_stdio(0),cin.tie(0);
        int T;
        cin >> T;
        while (T--){
            mmap.clear();
            cin >> s >> k;
            len = s.size();
            int dd = _change(s);
            mmap[dd] = 0;
            h = 1,t = 1;dl[1] = dd;
            while (h<=t){
                int x = dl[h++];
                int now = mmap[x];
                for (int i = len;i >= 1;i--) {
                    xx[i] = x%10;
                    x/=10;
                }
                if (now+1>k) break;
                for (int i = 1;i <= len;i++)
                    for (int j = i+1;j <= len;j++)
                        if (xx[i]>xx[j]){
                            _swap(xx[i],xx[j]);
                            if (xx[1]!=0) {
                                int tx = _change(xx);
                                if(mmap.find(tx)==mmap.end()){
                                    mmap[tx] = now+1;
                                    dl[++t] = tx;
                                }
                            }
                            _swap(xx[i],xx[j]);
                        }
            }
    
                    cout<<(*mmap.begin()).first<<' ';
    
            mmap.clear();
            dd = _change(s);
            mmap[dd] = 0;
            h = 1,t = 1;dl[1] = dd;
            while (h<=t){
                int x = dl[h++];
                int now = mmap[x];
                for (int i = len;i >= 1;i--) {
                    xx[i] = x%10;
                    x/=10;
                }
    
                if (now+1>k) break;
                for (int i = 1;i <= len;i++)
                    for (int j = i+1;j <= len;j++)
                        if (xx[i]<xx[j]){
                            _swap(xx[i],xx[j]);
                            if (xx[1]!=0) {
                                int tx = _change(xx);
                                if(mmap.find(tx)==mmap.end()){
                                    mmap[tx] = now+1;
                                    dl[++t] = tx;
                                }
                            }
                            _swap(xx[i],xx[j]);
                        }
            }
    
    
            map<int, int>::iterator it = mmap.end();
            it--;
            cout<<(*it).first<<endl;
        }
        return 0;
    }
    
    
  • 相关阅读:
    「SDOI2014」向量集 解题报告
    HNOI 2014 世界树
    LOJ #2205. 「HNOI2014」画框 解题报告
    KM模板
    洛谷 [HNOI2014]道路堵塞 解题报告
    [AHOI2014/JSOI2014] 解题报告
    AndroidStudio中添加依赖的三种方式以及如何引入so文件和arr文件
    android 四大组件详解
    Android—— ListView 的简单用法及定制ListView界面
    Android Studio 使用VCS版本控制
  • 原文地址:https://www.cnblogs.com/AWCXV/p/9435518.html
Copyright © 2020-2023  润新知