一种奇葩做法(过了样例,但不知是否可行)
查看原帖
一种奇葩做法(过了样例,但不知是否可行)
1035258
Gary0504楼主2024/10/26 22:54

关于2024CSP-J T3的一种奇葩做法(过了样例,但不知是否可行)


先用一个数组保存所有数字所需的木棒根数:

d[11]={6,2,5,5,4,5,6,3,7,6};

因为 n<105 n < 10^5,所以ansans必然<105<10^5,于是可以从11往后枚举到10510^5:

for(int i=1;i<=100005;i++)

这样就避免了前导零的问题,也能ansminans_{min}

在循环里面,可以先把整数转成字符串,然后就可以获得ii所需的木棒根数,与nn相比较,即可求出答案

核心代码如下:

cin>>T;
while(T--){
    cin>>n;
    bool fl=1;
    for(int i=1;i<=100005;i++){
        //把i转成字符串s
        int cnt=0;
        for(auto j:s){
            cnt+=d[j-'0'];
        }
        if(cnt==n){
            cout<<i<<endl;
            fl=0;
            break;
        }
    }
    if(fl){
        cout<<-1<<endl;
    }
}
  • 注意!!! 在Linux环境下,不能使用函数 itoa,只能手写

  • 关于此代码的时间复杂度:

    循环:O(n)O(n)

    intstring:O(6) O(6)

    判断:O(6)O(6)

    多组数据:O(T)O(T)

    所以整个代码的时间复杂度为:O(36×Tn) O(36 \times Tn)

    T<50,n<105 \because T<50,n<10^5 \therefore可以在1000ms1000ms内通过

2024/10/26 22:54
加载中...