P11229 [CSP-J 2024] 小木棍 题解

· · 题解

闲话

本蒟蒻第一篇黄题题解(话说今年J组T3真的太水了

考完的我原本自信满满,可许多大佬都说T3爆了...... 结果本代码似乎确凿是AC的(偷乐)

鄙人才疏学浅,仅供参考

题目大意

小 S 有 n 根长度相等的小木棍,用小木棍拼每种数字的方法如下图所示。

现在小 S 希望拼出一个正整数,满足如下条件:

拼出这个数恰好使用 n 根小木棍; 拼出的数没有前导0;且这个数尽可能小。小 S 想知道这个数是多少,如果不存在正整数满足以上条件,输出 −1。

规律

考场上蒟蒻的我本打算放弃,并开始了愉快的打表......

但众所周知,本题的特判+打表就有高达60pts,而打表也存在很高的计算量,于是阴差阳错之下,本蒟蒻发现了此题的规律(代码中不细述):

PS: 毕竟输出的是个数,别手欠在每位数字后输出空格

于是:

上代码!

#include<bits/stdc++.h>//懒人头文件 
using namespace std;
int n, t;
int main(){
    cin >> t;
    while(t--){
        cin >> n;
        if(n == 1) cout << -1 << endl;//特判无解情况 
        else if(n == 2) cout << 1 << endl;
        else if(n == 3) cout << 7 << endl;
        else if(n == 4) cout << 4 << endl;
        else if(n == 10) cout << 22 << endl;
        //特判不符合以下规律的 
        else if(n % 7 == 0){//开始判除以7的余数 
            int da = n / 7;//致敬dada 
            while(da--) cout << 8;
            puts("");//别忘了换行 
        }else if(n % 7 == 1){
            cout << 10;
            int da = n / 7 - 1;
            while(da--) cout << 8;
            puts("");
        }else if(n % 7 == 2){
            cout << 1;
            int da = n / 7;
            while(da--) cout << 8;
            puts("");
        }else if(n % 7 == 3){
            cout << 200;
            int da = n / 7 - 2;
            while(da--) cout << 8;
            puts("");
        }else if(n % 7 == 4){
            cout << 20;
            int da = n / 7 - 1;
            while(da--) cout << 8;
            puts("");
        }else if(n % 7 == 5){
            cout << 2;
            int da = n / 7;
            while(da--) cout << 8;
            puts("");
        }else if(n % 7 == 6){
            cout << 6;
            int da = n / 7;
            while(da--) cout << 8;
            puts("");
        }

    }
    return 0;//完结撒花 
} 

这么一道数论的题放在T3多少有点水了(小声蛐蛐)

欢迎大佬批判

也是水到2000字符了嘻嘻