题目大意:统计位数不大于n的自守数的个数。

Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

数据规模:1<=n<=2000。

理论基础:

自守数:参见链接1。

性质定理1:一个数为自守数当且仅当它为一个自守数的后缀。

性质定理2:(1除外)n位数的自守数仅有两个(位数包括前导0),优先考虑最高位不为0的时候。

题目分析:有了两个性质定理以后我们可以知道,每个自守数都是已有的自守数+前缀数字而来的,所以只要知道n位的两个自守数,就可以得到n+1位的两个自守数。反过来思考,如果我们知道了n+1位的自守数后那么小于n+1位的自守数我们都可以写出来。这样就出现了一个想法,先用递归将两个两千位(bign)(仅用到大数的乘法操作不是很困难)的自守数求出来,然后我们再找出值相同的自守数的个数m。用总数:1+2*n减去m即为答案了。当然,打表肯定是最好啦。扫描前导零的个数即为重复的个数。

代码如下:

#include<iostream>
#include<cstdio>
using namespace std;
char number1[2001]=
"0302695456948792438016548848805106486276062082716415913252360\
9790500938385405426324719893931802209823600162545177681029159\
3965045066578090330527721983852863418796455114247485363072354\
5704904450912521423427595549184397398445871252869481982692702\
9255264834903206526851272202961318699947776535481291519857640\
4229681830917734452777232007376038258831727292795636574190144\
4523595431910306357249617898820317578776106213770808096781137\
4931911766563031490205784352509572880668464121069252802275061\
2985116162063840067789794024490238751112586895345495148882006\
7866770234100283954928297028644727362521753544319791185506815\
7264858804852673871684804002188529473022223344541221328464844\
1535937936631336044589403287234784019473575603613462120086753\
7334691331433871735088021260028575298538664393102232655345477\
6845029957025561658143370236502074744856814787872902092412582\
9053012491246688683515876774998917686787157281349408792768945\
2979709777230540335661882819870221063055796723980661119019774\
4642421025136748701117131278125400133690086034889084364023875\
7659368219796261819178335204927041993248752378258671482789053\
4489744014261231703569954841949944461060814620725403655999827\
1588356035049327795540741961849280952093753026852390937562839\
1485716123673519706092242423987770075749557872715597674134589\
9753769551586271888794151630756966881635215504889827170437850\
8028434084412644126821848514157729916034497017892335796684991\
4473895660019325458276780006183298544262328272575561107331606\
9701586498422229125548572987933714786632317240551575610235254\
3994999345608083801190741530060056055744818709692785099775918\
0500754164285277081620113502468060581632761716767652609375280\
5684421448619396049983447280672190667041724009423446619781242\
6690787535944616698508064636137166384049029219341881909581659\
5244778618461409128782984384317032481734288865727376631465191\
0498802944796081467376050395719689371467180137561905546299681\
4764263903953007319108169802938509890062166509580863811000557\
423423230896109004106619977392256259918212890625",number2[2001]=
"9697304543051207561983451151194893513723937917283584086747639\
0209499061614594573675280106068197790176399837454822318970840\
6034954933421909669472278016147136581203544885752514636927645\
4295095549087478576572404450815602601554128747130518017307297\
0744735165096793473148727797038681300052223464518708480142359\
5770318169082265547222767992623961741168272707204363425809855\
5476404568089693642750382101179682421223893786229191903218862\
5068088233436968509794215647490427119331535878930747197724938\
7014883837936159932210205975509761248887413104654504851117993\
2133229765899716045071702971355272637478246455680208814493184\
2735141195147326128315195997811470526977776655458778671535155\
8464062063368663955410596712765215980526424396386537879913246\
2665308668566128264911978739971424701461335606897767344654522\
3154970042974438341856629763497925255143185212127097907587417\
0946987508753311316484123225001082313212842718650591207231054\
7020290222769459664338117180129778936944203276019338880980225\
5357578974863251298882868721874599866309913965110915635976124\
2340631780203738180821664795072958006751247621741328517210946\
5510255985738768296430045158050055538939185379274596344000172\
8411643964950672204459258038150719047906246973147609062437160\
8514283876326480293907757576012229924250442127284402325865410\
0246230448413728111205848369243033118364784495110172829562149\
1971565915587355873178151485842270083965502982107664203315008\
5526104339980674541723219993816701455737671727424438892668393\
0298413501577770874451427012066285213367682759448424389764745\
6005000654391916198809258469939943944255181290307214900224081\
9499245835714722918379886497531939418367238283232347390624719\
4315578551380603950016552719327809332958275990576553380218757\
3309212464055383301491935363862833615950970780658118090418340\
4755221381538590871217015615682967518265711134272623368534808\
9501197055203918532623949604280310628532819862438094453700318\
5235736096046992680891830197061490109937833490419136188999442\
576576769103890995893380022607743740081787109376"; int main()
{
int n,cnt=0;
scanf("%d",&n);
for(int i=1999;i>=1999-(n-1);i--)
{
if(number1[i]=='0')cnt++;
if(number2[i]=='0')cnt++;
}
printf("%d\n",2*n-cnt+1);
return 0;
}

其中number1,number2即为求出的两千位的两个自守数啦。记得打出自守数时一定要左补零。

参考文献:

http://zh.wikipedia.org/wiki/%E8%87%AA%E5%AE%88%E6%95%B0

by:Jsun_moon http://blog.csdn.net/Jsun_moon

URAL 1698的更多相关文章

  1. ural 1698. Square Country 5(记忆化搜索)

    1698. Square Country 5 Time limit: 2.0 secondMemory limit: 64 MB The first arithmetical operation ta ...

  2. URAL 1698. Square Country 5(记忆化搜索)

    题目链接 题意 : 自守数的定义:如果某个数的平方的末尾几位数等于这个数,那么就称这个数为自守数.例如5*5=25,则5就是自守数.让你求不超过n位的自守数有多少 思路 : 实际上,自守数还有两个性质 ...

  3. poj 1698 Alice‘s Chance

    poj 1698  Alice's Chance 题目地址: http://poj.org/problem?id=1698 题意: 演员Alice ,面对n场电影,每场电影拍摄持续w周,每周特定几天拍 ...

  4. 【POJ 1698】Alice's Chance(二分图多重匹配)

    http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...

  5. 后缀数组 POJ 3974 Palindrome && URAL 1297 Palindrome

    题目链接 题意:求给定的字符串的最长回文子串 分析:做法是构造一个新的字符串是原字符串+反转后的原字符串(这样方便求两边回文的后缀的最长前缀),即newS = S + '$' + revS,枚举回文串 ...

  6. ural 2071. Juice Cocktails

    2071. Juice Cocktails Time limit: 1.0 secondMemory limit: 64 MB Once n Denchiks come to the bar and ...

  7. ural 2073. Log Files

    2073. Log Files Time limit: 1.0 secondMemory limit: 64 MB Nikolay has decided to become the best pro ...

  8. ural 2070. Interesting Numbers

    2070. Interesting Numbers Time limit: 2.0 secondMemory limit: 64 MB Nikolay and Asya investigate int ...

  9. ural 2069. Hard Rock

    2069. Hard Rock Time limit: 1.0 secondMemory limit: 64 MB Ilya is a frontman of the most famous rock ...

随机推荐

  1. 分分钟搞定Python之排序与列表

    排序时程序中用得比较多的方法了.在Python中,最简单的排序方法摸过与使用内置的sorted(list)这个函数了,该函数一一个列表作为参数返回一个新的列表,只不过是把旧列表中的元素排过序了.原列表 ...

  2. 【WIN10】我的第一個WIN10-UWP應用——古文觀止

    已上架,下載地址:https://www.microsoft.com/store/apps/9nblggh6cc32 特點是:繁體豎排,隱藏/顯示標點符號. 截幾張圖來瞅瞅. 1.主界面 這張圖使用的 ...

  3. linux文件删除,剩余空间没变化

    centOS6.6,删除了一个13G的文件,但是使用df -h 查看,剩余空间没变化这个文件夹查看 du -h查看发现空间已经变少了.原因可能是删除文件时有进程在使用文件,导致空间未释放.yum in ...

  4. Sublime Text2 默认语言(windows/unix)设置,Sublime插件大全

    Sublime默认系统语言设置 Sublime Text 2默认使用的就是UTF8,这个UTF8模式使用的是不带BOM的,如果要修改这个配置,到Perference->Settings-User ...

  5. BZOJ 1192 鬼谷子的钱袋 数论

    1192:鬼谷子的钱袋 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1926  Solved: 1417 题目连接 http://www.lydsy ...

  6. linux基础环境部署

    Content 0.序 1.更新安装库 2.安装基础库 0.序 本文主要是记录php在 Centos下的安装配置 .文中如无特别说明.表示php-5.6.31代码目录. 1.更新安装库 $ yum u ...

  7. Git_忽略特殊文件

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示“Untracked files ...”,有强迫症的童鞋心里 ...

  8. oracle监听理解 命名理解

    一.监听器是oracle基于服务器端的一种网络服务,主要作用是监听客户端的连接请求,并将请求转发给服务器. 监听器基于端口的,每个监听器会占用一个端口.默认监听端口1521. oracle家目录下的n ...

  9. [Linux] VIM Practical Note

    Practical Vim 文件 1.1. 管理多个文件 1.1.1. 缓冲区 • :ls • 查看缓冲区列表 • :bprev • 前一项 • :bnext • 后一项 • :bfirst • 第一 ...

  10. The YubiKey -- HOW IT WORKS

    A single YubiKey has multiple functions for protecting access to your email, your apps and your phys ...