刷好题,固基础-10

今天打天梯赛模拟赛有一道全排列的题(在我看来是啦,虽然只拿了25/30,一个点超时了呜呜呜呜呜)

在此纪念一下自己推导得出的得到两种不同全排列的方法:

方法一:按照字典序大小推导得出的全排列顺序

p是全排列的总和,pa是一条排列,v数组表示该点是否被访问过

void dfs(int idx, vector<int> &pa){
     if(pa.size() != 0)    p.push_back(pa);
     if(idx == m)    return ;
     for(int i = 1; i <= m; ++i){
         if(v[i] == 0){
             v[i] = 1;
             pa.push_back(i);
             dfs(idx+1, pa);
             pa.pop_back();
             v[i] = 0;
         }
     }
 return ;
}

如果需排列的位置有1,2,3,输出结果应该如下:

1
1 2
1 3
1 2 3
1 3 2
2
2 1
2 3
2 1 3
2 3 1
3
3 1
3 2
3 1 2
3 2 1

方法二:先按照排列的数字多少进行排列,在这样的一个组合内,再进行字典序的排列

void dfs(int idx, vector<int> &pa){
    if(pa.size() == idx){
        p.push_back(pa);
        return ;
    }
    for(int i = 1; i <= m; ++i){
        if(v[i] == 0){
            v[i] = 1;
            pa.push_back(i);
            dfs(idx, pa);
            pa.pop_back();
            v[i] = 0;
        }
    }
    return ;
}

如果需排列的位置有1,2,3,输出结果应该如下:

1
2
3
1 2
1 3
2 1
2 3
3 1
3 2
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

2024天梯赛模拟赛L3-1题---25/30代码如下:

#include<bits/stdc++.h>
using namespace std;
int n, m;
int s[20][20];
int v[20];
vector<vector<int>> p;
void dfs(int idx, vector<int> &pa){
    // if(pa.size() != 0)    p.push_back(pa);
    // if(idx == m)    return ;
    // for(int i = 1; i <= m; ++i){
    //     if(v[i] == 0){
    //         v[i] = 1;
    //         pa.push_back(i);
    //         dfs(idx+1, pa);
    //         pa.pop_back();
    //         v[i] = 0;
    //     }
    // }
// return ;
//上面是按照字典序排序的全排列
//下面是按照个数多少排序的+字典序排序的全排列
    if(pa.size() == idx){
        p.push_back(pa);
        return ;
    }
    for(int i = 1; i <= m; ++i){
        if(v[i] == 0){
            v[i] = 1;
            pa.push_back(i);
            dfs(idx, pa);
            pa.pop_back();
            v[i] = 0;
        }
    }
    return ;
}
int main(){
    cin >> n >> m;
    for(int i = 1; i <= m; ++i)
        for(int j = 1; j <= n; ++j)
            cin >> s[i][j];
    vector<int> pa;
    for(int i = 1; i <= m; ++i)
        dfs(i, pa);

    // cout << p.size() << endl;
    // for(int i = 0; i < p.size(); ++i){
    //     for(int j = 0; j < p[i].size(); ++j)
    //         cout << p[i][j];
    //     cout << endl;
    // }
    int a[n+10], flag = 0;
    for(int i = 0; i < p.size(); ++i){
        fill(a, a+n+10, -1);
        for(int j = 0; j < p[i].size(); ++j){
            for(int k = 1; k <= n; ++k){
                if(s[p[i][j]][k] == -1)
                    a[k] = -1;
                else if(s[p[i][j]][k] == 1)
                    a[k] = 1;
            }
            flag = 1;
            for(int k = 1; k <= n; ++k){
                if(a[k] != 1)    flag = 0;
            }
            if(flag)    break;
        }
        if(flag){
            for(int k = 0; k < p[i].size(); ++k){
                if(k)    cout << " ";
                cout << p[i][k];
            }
            break;
        }
    }
    return 0;
}
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: unt413a-s905l3是一款基于S905L3芯片的机顶盒设备。线是指通过将件文件写入设备的存储空间来更新设备的件版本。 在线的过程中,首先需要准备好正确的件文件,确保件与设备型号完全匹配,避免出现不兼容或件的问题。 然后,我们需要将设备连接到电脑,使用线工具进行线的操作。一般来说,线工具可以在设备的官方网站或相关论坛上获得。 在使用线工具进行线时,需要按照工具的使用说明进行操作。一般情况下,我们需要选择正确的连接方式(如USB连接),选择件文件路径,并确认开始线的操作。 在线的过程中,我们需要注意以下几点: 1.保证电脑与设备稳定连接,避免出现断连或其他异常情况导致线失败的问题。 2.确保设备电量充足,避免因为电量不足而导致线过程中设备意外断电。 3.遵循工具的操作指南,按照要求进行对应的操作,避免因操作失误导致线失败。 在线的时间长短取决于件的大小和设备的读写速度。成功后,设备会自动重启,并加载新的件。 线是更新设备件的常见方式之一,但由于涉及到设备操作系统的核心部分,如果操作不当可能会导致设备无法正常启动或损坏。因此,在线之前,建议备份好重要的数据,并在确保操作正确的情况下进行操作。如果不确定如何操作,建议咨询设备厂家或相关专业人士的帮助。 ### 回答2: unt413a-s905l3是一款电视盒子,线指的是通过连接电脑,通过线的方式将入到设备中。而件就是电视盒子的操作系统,件的更新包含了新的功能和性能优化。 首先,进行线之前,需要准备好电视盒子的线工具和对应的件文件。线工具一般是由设备厂商提供,而件文件可以从官方网站或者其他可靠渠道下载。 接下来,将电视盒子通过USB线连接到电脑,并打开线工具。再选择相应的件文件,点击件按钮。此时,线工具会将件文件传输到电视盒子中,进行写操作。 在件的过程中,需要注意保证设备的电量充足,同时避免中断过程。写完成后,可以断开USB连接,将电视盒子重新启动,进行系统初始化。 线可以解决电视盒子系统出现故障、软件冲突等问题。同时,通过线还可以安装各种第三方件,以获得更多的功能和个性化设置。 但是,线存在一定的风险,如果操作不当或者使用不合适的件,可能导致设备无法开机或者出现其他问题。因此,在线之前,建议先备份重要数据,并确保使用官方或可靠的件文件。 总之,unt413a-s905l3线是通过连接电脑,将入到电视盒子中的一种操作,可以解决系统故障和安装第三方件等需求。但是,需要注意操作风险,选择合适的件文件,以免造成设备损坏。 ### 回答3: unt413a-s905l3线是指将件文件入unt413a-s905l3设备的操作。线的目的是更新件版本、修复设备问题或恢复设备出厂设置。下面是线的具体步骤: 首先,需要准备好线工具和对应的件文件。线工具可以在相关的线论坛或官方网站上下载得到。件文件则需要根据设备型号及具体版本进行选择,确保与设备兼容。 其次,将unt413a-s905l3设备连接至电脑。一般来说,线工具会提供相应的连接方式,可以通过USB电缆将设备与电脑连接。 然后,在电脑上打开线工具,并根据指引选择相应的操作模式。一般会提供机、升级、修复等选项。选择合适的模式后,点击开始或机按钮。 接下来,选择之前准备好的件文件,并等待线工具进行写操作。整个过程可能需要一些时间,请耐心等待。写过程中注意不要中断电源,以免损坏设备。 最后,写完成后,线工具会自动提示写成功或失败。如果成功,设备将重新启动,并使用新的件版本。如果失败,可以根据线工具提供的错误信息进行排查问题。 总之,unt413a-s905l3线是一种件的操作,可以更新设备件版本、修复问题或恢复出厂设置。在进行操作前,需要准备线工具和对应的件文件,并按照指引进行操作。件过程中要注意不要中断电源,写完成后可以检查是否成功,并根据情况进行进一步操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值