传送门:
http://codeforces.com/contest/897/problem/B
思路:开始自己的想法就错了,然后想到了各种问题,比如公式有问题,精度损失问题。。。最后看了各位大神的代码,着实佩服自己低到死的智商。。。
最后总的来说有两种方法:首先是把每个回文数加起来,然后求和就行了,下面的代码就是这种思路的实现。另外一种就是把每个数翻转一下如果和原数相同就是回文数,总的来说没有直接求回文数容易代码实现。但这个很直接的想法当时居然没有想到,这就确实很智障了。。。可能是最近做题不多,手生了(为自己很弱的思维性找个理由吧)
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll k,m;
while(cin>>k>>m){
ll ans=0;
for(ll i=1; i<=k; i++){
ll x,y;
x = i;
y = i;
while(y){
x = x*10+y%10;
y /= 10;
}
ans = (ans + x) % m;
}
cout<<ans;
}
return 0;
}
偶然看到网上大牛的perl代码:
<> =~ / /;
( $sum += $_ . reverse ) %= $' for 1 .. $`;
print 0 + $sum