传送门:
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