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-1个0
第二种情况,看似这种情况只需要按照上一个的结论套进来,改成输出n−2个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; }