A. Olesya and Rodion

题目链接:http://codeforces.com/problemset/problem/584/A

题目的大致题意就是: 求一个n位数,这个n位数可以被t整除

 

这题其实是个非常水的题目,但是我的思想出错了:

我的想法是:

因为是n位数,那么我从10^(n-1) -> 10^(n) 开始遍历,如果出现了一个能被t整除的就break

 

但是用算法实现的话这个思想很容易爆数据,所以遇到大的数据我的代码就WA了

 

后来就重新想了一个思路:

首先,看看数据范围:

( 1<=n<=100,2<=t<=10 )(1<=n<=100,2<=t<=10)

我们可以发现,tt的取值有两种情况

1.一位数(2,3,4,5,6,7,8,9)
2.两位数(仅有10)

分别讨论:


第一种情况,我们可以知道某个数乘以10^x是可以被x整除的

如30000能被3整除

利用这个特性,对于这种情况我们就有解决方案了,先输出t,再输出n-10


 

第二种情况,看似这种情况只需要按照上一个的结论套进来,改成输出n2个0就行了

可你要知道,题目上叫你不行的时候输出-1这不是废话

假如n=1,t=10那就不对劲了

这个特例需要输出1

其它状况就还是差不多的结论

 

AC代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdbool>

using namespace std;

int main(){
    int n,t;
    cin>>n>>t;
    if(t==10)//分类讨论
    {
        if(n==1) 
            cout<<-1;//特判
        else
        {
            cout<<1;
            for(int i=1;i<n;i++) 
                cout<<0;
        }
        cout<<endl;
        return 0;
    }
    cout<<t;
    for(int i=1;i<n;i++)
        cout<<0;
    cout<<endl;
    return 0;
}

 

posted @ 2019-06-26 15:30  _Ackerman  阅读(232)  评论(0编辑  收藏  举报