POJ 3252 Round Numbers

这段时间要沉迷刷题一段时间了,就让CSDN陪我一起吧!

一、题目大意

这个题目的意思比较简单,就是求一个给定的区间[start, finish]之间有多少过Round Number,所谓Round Number,一个数如果是Round Number的话,那么它转化为二进制后,0的个数一定大于等于1的个数。

二、题目思路以及AC代码

听完题目,感觉好像挺简单的样子呀,那不是直接遍历一遍就好啦?求二进制0和1的个数还是简单的。我在看到它20亿的数据量之前也是这么想的。

所以我们就要另想一个办法优化,其实也很简单,既然它给了20亿的数据量,就肯定不能O(N)了,那我们就得考虑用空间换时间,那么我们提前打表,把每隔1000000的那个数的Round Number存在数组里,自然就可以减少时间的损耗了,直接就把遍历20亿数据,变成了遍历100万数据。

具体做法如下:首先建立数据dp[2010],dp[1]表示闭区间[1, 1000000]上的Round Number的个数,dp[2]表示闭区间[1000000, 2000000]上Round Number的个数,以此类推,直到20亿。这样的话,如果再给我一个数x,让我求闭区间[1, x]上的Round Number的个数,我就可以先找到x所在的dp中存在的区间,以1100000为例,其大于100万,小于200万,那么在求解[1, 1100000]上Round Number个数的时候,我就可以直接用dp[1]加上1000001到1100000上Round Number的个数,就可以在遍历100万数据量之内解决这个问题。

这里面其实选取打表的数量比较重要,因为既要保证其不会TLE,也要保证代码长度在OJ允许的范围之内,这里我选择间隔100万,其实还可以尝试其他的。

我在网上还看到好多用打表杨辉三角的方法来做的,但我觉得我这样更加容易理解一些,而且如果想提高执行效率的话,完全可以把间隔改小。

下面给出AC代码:

#include <iostream>
using namespace std;

int dp[2010] = {
	0,483212,912008,1496047,1936710,2497049,2953836,3372377,3666046,4224609,4888435,5470687,5985204,6473508,6997710,7407121,7759888,8114246,8841202,9418915,9988999,10387703,10975302,11401951,11825190,12093372,12647109,13090291,13513784,13806423,14173972,14478373,14726176,14902859,15366960,16201541,16950748,17658367,18268984,18993614,19575038,20140363,20548986,21286246,21888932,22491383,22921271,23499961,23944182,24358905,24649517,25239333,25899457,26483106,26967731,27475420,27991458,28403584,28751667,29097194,29645428,30054847,30430558,30692950,31084403,31322215,31584664,31722784,32527953,33310112,34055961,34701584,35395499,36047985,36635786,37121164,37692107,38382504,38971194,39498926,39958625,40492390,40907482,41282752,41573188,42308110,42882438,43478493,43906876,44492036,44934441,45350847,45627800,46146335,46616525,47028856,47334412,47671874,48002942,48259763,48448125,48799637,49508491,50092717,50647285,51071367,51639722,52038237,52431729,52694622,53287273,53720987,54139486,54415411,54804200,55096784,55348037,55513038,55922617,56415984,56836115,57174501,57496304,57845934,58089661,58302816,58498196,58876476,59121009,59354387,59477906,59739331,59878002,60014029,60076643,60832929,61739336,62607725,63415911,64214443,65027775,65781109,66473788,67140388,67984879,68727353,69442860,70048316,70777285,71356714,71927618,72320180,73203960,73972480,74726814,75349646,76062801,76700591,77294730,77764296,78374089,79037922,79616994,80132387,80621812,81145062,81554249,81907967,82276494,83133241,83872636,84609414,85185284,85934320,86540180,87140810,87576880,88275274,88900647,89499996,89967525,90493471,90975179,91381110,91701463,92183365,92877836,93467319,93999860,94444353,94999986,95405882,95788119,96047470,96620172,97037422,97462900,97725833,98136940,98409864,98663526,98818321,99452764,100262374,101006822,101670764,102336625,103029697,103616490,104146672,104632412,105352101,105936318,106494260,106910321,107481791,107877826,108305861,108569162,109284495,109906642,110495619,110955508,111499976,111967859,112383147,112690189,113119063,113632180,114048160,114392411,114702040,115053406,115308109,115525006,115722990,116458302,117032797,117625403,118052825,118640976,119080868,119498192,119773328,120294996,120763905,121176200,121480775,121821271,122148660,122406112,122593572,122908349,123441282,123847200,124219125,124493965,124879234,125120763,125352629,125488847,125910474,126175283,126434106,126578569,126818609,126973480,127106914,127179226,127734914,128651662,129523981,130359704,131133859,131977434,132718117,133441887,134049617,134907729,135648920,136386413,136972604,137732340,138344004,138940902,139384120,140136340,140938928,141688413,142343653,143012434,143678155,144269096,144784195,145316040,146022471,146604705,147142583,147587117,148145663,148548773,148938390,149174785,150056636,150825115,151578168,152202071,152916389,153551930,154145817,154616399,155227242,155890809,156466934,156983222,157473887,157996022,158406211,158760175,159116878,159843317,160420538,160991142,161391777,161971486,162399241,162822781,163089413,163646773,164091959,164511654,164804119,165171416,165477730,165725315,165897984,166370077,167205852,167953647,168661112,169269285,169995863,170577198,171140558,171552827,172290912,172885964,173489360,173918835,174499941,174943215,175355166,175646659,176243029,176900711,177484893,177970032,178475224,178991373,179401406,179751401,180100759,180644644,181053852,181431769,181694035,182085383,182317175,182580079,182717832,183431847,184053531,184644428,185102035,185647873,186115962,186531185,186838183,187266365,187780616,188196309,188539203,188849867,189202193,189454431,189671509,189861802,190431655,190828287,191235561,191497541,191915885,192184556,192442023,192585245,192958205,193250701,193503241,193666748,193875750,194053386,194189008,194276770,194627222,195471713,196215551,196939986,197535093,198268868,198845245,199417121,199840082,200590088,201201582,201799399,202244159,202797347,203262572,203676563,203978505,204509505,205175731,205775376,206291735,206768780,207297793,207703379,208069057,208381790,208938856,209344894,209736557,209975420,210402035,210666237,210924875,211067401,211708324,212355104,212947136,213417773,213935434,214421225,214831734,215166326,215565753,216094199,216502504,216854711,217149788,217525464,217769659,217998091,218124678,218721488,219149987,219568942,219841818,220240823,220518682,220777322,220934231,221272227,221578365,221821770,222005307,222209933,222398422,222531972,222625439,222865780,223591447,224170069,224739027,225141273,225716606,226144886,226568495,226834562,227393286,227839376,228256982,228549355,228916573,229223598,229471646,229642847,230016667,230536044,230948410,231298361,231590491,231963310,232212253,232431710,232585590,232979157,233224571,233486140,233624745,233879142,234022282,234153992,234222780,234692541,235167206,235576519,235886423,236228638,236564803,236815352,237012684,237247497,237606795,237857993,238077788,238224378,238455291,238571998,238706847,238767287,239177109,239449160,239704796,239852430,240090751,240247537,240380948,240455165,240635356,240822587,240957180,241045988,241143803,241238442,241295027,241336697,241475587,242453834,243393509,244339749,245221407,246155922,247047795,247918179,248701453,249571816,250479070,251346239,252157134,252950418,253777255,254529543,255223516,255891646,256822800,257687849,258543447,259292758,260153288,260892697,261630169,262229941,263094738,263864491,264622065,265247356,265954225,266599821,267190269,267667909,268339267,269251902,270127276,270961742,271737096,272579664,273322128,274042310,274653636,275510591,276252915,276989958,277568085,278333035,278943229,279540301,279981216,280740690,281540021,282291148,282942003,283616180,284280595,284867019,285380042,285919466,286621940,287206263,287739010,288188864,288745793,289148495,289537112,289779241,290728431,291612705,292483955,293265912,294101799,294890300,295645199,296296138,297032448,297844340,298584871,299272787,299923888,300618781,301207646,301741098,302230441,303085712,303827283,304561785,305140149,305877116,306485760,307086545,307519541,308224480,308852313,309445857,309912371,310440892,310923308,311330332,311642255,312173250,313009122,313756294,314462598,315073263,315797705,316380620,316939867,317357466,318095045,318682568,319285880,319717233,320298129,320741151,321150265,321442627,322044890,322700586,323285256,323772176,324273670,324789035,325199833,325548958,325903211,326442201,326854000,327231308,327494989,327884684,328119238,328375157,328512920,329388576,330282334,331150722,331944196,332766234,333570101,334318141,334981758,335684384,336518277,337267436,337966746,338591095,339300723,339886512,340443089,340881510,341743724,342482205,343228883,343835512,344583832,345200972,345794936,346239640,346905790,347555173,348141021,348623472,349125490,349623813,350042347,350380986,350831904,351676359,352416846,353143157,353739533,354471633,355047722,355621162,356036135,356790794,357399720,357999986,358443225,358995532,359461065,359876828,360176174,360713536,361377790,361975354,362491306,362968744,363499709,363905731,364267108,364584064,365142708,365546671,365938159,366170691,366599112,366862082,367120628,367262750,367995647,368792193,369544649,370194093,370870603,371534451,372118789,372632649,373174024,373876079,374460457,374993753,375442728,375999489,376400750,376790360,377034250,377788742,378395034,378993516,379431958,379999951,380444551,380867627,381160376,381640765,382121368,382526688,382851782,383191686,383528335,383784076,383981651,384268817,384993054,385574513,386140413,386545605,387117326,387541754,387966457,388230506,388794740,389239577,389655169,389946171,390319217,390621929,390871910,391038430,391418724,391935629,392347840,392695732,392993996,393360379,393610900,393827699,393988327,394380052,394620273,394882309,395020786,395275618,395418271,395551287,395618428,396295778,397205572,398071467,398884970,399681163,400514139,401260608,401966026,402604798,403452372,404199368,404927319,405515161,406250986,406824253,407422522,407851066,408680017,409462708,410211798,410846204,411547204,412199516,412787360,413270882,413839448,414531059,415122754,415643265,416110885,416645660,417053608,417426945,417736109,418597984,419336731,420079430,420687012,421436488,422052382,422646248,423092190,423758424,424407583,424992004,425475505,425978503,426473718,426892574,427231961,427659770,428367197,428943923,429499996,429931436,430493506,430894569,431288591,431534910,432135720,432565902,432987789,433260868,433648258,433940239,434195825,434354758,434916771,435729824,436484879,437177866,437813375,438520127,439101452,439643671,440103961,440832689,441412198,441983636,442375452,442983096,443411752,443831617,444103388,444766615,445405902,445999916,446468734,446991373,447475204,447878242,448213945,448621013,449145047,449554304,449907469,450201357,450576283,450817999,451049025,451184599,451935569,452540949,453141141,453577707,454147485,454590970,455014431,455306980,455788767,456269762,456675748,456998093,457339051,457676604,457930923,458128372,458387762,458942582,459348547,459731870,459983283,460376353,460630797,460892269,461030102,461434402,461707822,461961464,462115973,462348474,462509078,462640643,462714991,463177006,464011488,464758802,465463535,466077919,466798477,467382742,467940285,468362078,469099155,469678752,470284844,470714796,471297378,471738860,472152047,472438896,473048611,473700180,474288744,474773499,475272585,475785855,476200828,476545532,476905906,477438514,477854000,478229340,478495185,478883571,479121681,479370425,479507969,480231517,480855205,481446859,481895110,482447041,482916692,483328882,483634053,484065718,484576156,484993866,485331348,485649798,486001606,486248285,486463328,486666998,487234653,487633511,488025709,488288613,488709740,488975741,489233770,489378815,489752435,490044466,490296483,490460602,490674077,490843357,490979851,491067568,491409086,492115537,492693537,493246741,493680387,494240411,494643506,495036491,495279793,495881378,496312451,496733538,497006505,497393243,497685595,497941139,498099651,498527305,499014427,499428653,499764588,500089557,500439452,500687933,500889218,501097183,501474925,501719281,501949270,502068454,502325437,502463190,502598847,502661429,503192440,503646160,504064750,504359603,504723897,505030931,505272585,505459897,505741864,506083166,506333704,506534041,506704636,506921518,507046906,507161380,507233283,507634648,507897047,508157680,508297266,508547909,508692163,508827326,508896128,509111685,509276620,509406391,509484760,509593083,509681374,509739874,509775355,510039529,511016960,511957181,512896123,513759548,514699155,515578028,516456007,517224783,518126980,519021868,519892066,520691879,521505184,522314586,523059043,523723142,524450737,525376522,526243482,527086384,527847926,528700404,529444825,530172660,530762021,531624266,532365487,533132405,533741703,534478756,535100567,535690293,536148997,536899945,537807221,538675479,539488157,540282910,541114434,541863895,542566183,543208838,544053369,544802528,545529561,546118292,546853761,547428219,548019312,548446618,549283182,550064160,550814971,551443139,552150169,552800463,553388077,553869162,554443723,555129136,555722862,556239035,556712644,557245033,557651046,558023460,558342937,559282052,560145118,561007366,561774556,562641408,563414907,564168967,564796135,565579956,566381326,567127356,567789187,568451322,569120043,569718434,570235711,570785808,571628998,572370118,573093017,573693480,574421317,575001873,575573419,575977215,576736424,577348508,577945756,578388533,578940131,579406212,579822689,580118477,580720544,581534136,582285783,582977405,583615918,584321599,584904178,585441129,585907965,586636120,587215583,587785100,588180081,588779756,589208335,589626934,589899794,590569102,591203699,591797537,592268412,592791277,593275205,593675146,594010075,594421449,594942653,595353570,595707169,596000160,596373868,596617918,596846358,596989638,597933290,598816443,599691838,600468425,601309561,602093644,602849499,603498497,604239835,605051711,605794116,606470412,607126878,607822532,608410061,608942701,609436652,610293508,611035983,611767771,612348959,613087008,613680733,614284114,614714086,615430124,616055078,616642502,617108483,617645744,618121410,618530723,618839899,619380985,620215340,620960579,621667064,622282594,622999827,623583903,624143366,624566432,625303355,625874652,626483232,626912008,627495962,627936745,628352543,628635079,629251033,629900948,630491202,630975088,631470602,631985113,632400750,632743285,633108042,633642074,634054350,634429465,634695023,635085453,635323304,635565849,635703240,636537952,637316883,638068724,638693688,639403404,640052831,640640604,641121368,641698630,642381592,642975676,643492491,643966650,644499268,644902804,645276218,645588955,646322462,646898726,647470844,647892349,648491348,648921173,649343769,649617379,650144563,650609430,651024137,651325385,651677730,651985039,652245575,652432899,652811823,653516456,654097957,654646031,655083396,655640610,656046339,656437876,656675441,657280606,657710879,658131500,658403225,658794546,659082341,659339424,659495639,659931700,660417063,660826578,661160971,661491480,661836941,662087287,662284932,662498532,662873683,663117823,663346117,663471240,663721286,663858893,663995073,664057086,664850932,665751036,666622187,667426581,668232064,669044304,669784279,670473991,671158335,671995742,672742246,673451072,674062282,674787530,675366691,675934858,676340256,677205088,677973047,678731568,679346649,680071218,680698840,681293028,681760543,682382214,683045864,683627530,684120687,684622548,685141428,685553814,685903359,686291256,687147558,687890398,688620588,689203475,689941284,690531336,691134633,691565566,692282759,692907573,693492951,693959970,694498280,694972476,695381656,695691820,696189968,696882738,697467253,697999790,698454929,698995966,699406407,699784450,700060912,700631865,701024374,701448675,701711624,702124754,702396954,702652498,702800041,703468898,704272315,705020854,705684653,706338572,707030452,707621209,708144353,708647618,709356567,709943019,710499654,710918345,711489717,711886465,712289297,712551597,713287948,713905892,714499906,714944021,715499976,715967490,716378329,716683795,717123865,717624037,718042731,718380971,718701704,719052404,719294757,719511304,719739008,720471767,721048193,721620922,722037932,722638084,723066683,723490175,723763268,724291298,724756125,725171943,725472129,725825753,726133537,726391830,726579254,726912369,727442536,727848523,728211175,728497607,728874306,729120532,729352053,729468773,729896856,730160085,730418631,730560820,730805314,730955300,731090858,731159671,731725355,732538141,733285783,733975473,734619696,735322230,735906621,736439518,736911809,737638793,738217720,738786682,739184694,739777118,740204484,740625905,740895898,741572169,742201442,742799525,743268343,743793251,744274617,744678516,745005764,745422660,745939430,746354431,746705476,746998242,747370138,747617911,747843039,747993663,748730760,749338305,749939447,750371561,750946617,751392553,751808643,752099943,752588859,753070295,753477717,753788643,754134760,754472123,754724734,754920496,755190541,755741939,756150306,756526562,756787185,757179246,757420869,757682408,757821162,758228094,758501306,758752504,758907264,759142824,759300425,759433235,759508668,759938554,760630610,761216695,761747192,762204196,762741877,763154363,763531320,763809912,764379870,764773869,765193823,765456738,765869858,766142675,766398261,766544872,767040977,767511608,767923883,768230707,768564496,768900674,769156716,769346386,769596752,769950625,770199076,770415167,770567192,770796465,770919459,771037520,771097936,771687409,772122357,772541053,772816177,773205848,773498340,773749180,773914476,774223705,774541389,774798935,774988205,775181020,775378362,775502931,775608084,775751662,776133120,776375084,776609848,776736114,776997418,777135668,777272160,777334784,777569193,777724388,777858974,777929437,778045596,778121310,778179010,778212307,778598526,779529063,780393484,781245323,781999452,782856828,783598695,784335661,784907944,785792027,786560449,787316149,787937827,788650132,789290590,789884814,790352939,791017551,791830192,792576297,793266875,793911626,794613297,795197534,795731166,796203298,796930365,797508366,798078204,798476789,799065440,799492189,799915109,800183647,800950186,801734621,802492524,803141873,803820930,804481447,805062958,805567487,806124099,806817371,807408024,807940601,808386501,808940867,809346924,809730834,809990123,810727338,811330944,811932912,812363564,812941455,813386124,813801141,814091848,814584453,815063606,815472247,815780254,816127918,816464256,816716805,816912146,817237937,818091419,818835875,819562970,820149841,820886936,821469340,822074304,822505123,823225446,823849273,824435485,824899366,825441234,825911732,826324525,826633345,827133656,827824375,828412638,828940937,829400034,829934626,830349318,830724904,831005575,831574223,831970134,832385764,832648755,833062473,833335203,833591251,833736800,834342436,834994454,835582151,836065308,836559121,837071853,837488953,837827398,838200376,838734585,839142336,839515484,839786784,840174532,840414772,840647994,840785736,841377304,841811209,842229722,842505569,842894362,843186734,843437263,843603028,843914197,844229638,844488108,844676996,844870561,845067161,845193796,845296391,845492093,846351457,847091425,847829337,848420311,849179107,849789580,850388173,850831301,851500952,852149018,852739600,853214320,853726800,854213031,854628321,854964494,855407194,856114324,856695560,857237502,857678248,858238133,858641236,859032310,859265061,859871328,860300034,860719603,860991648,861388385,861669609,861927154,862084039,862615037,863278864,863858859,864374134,864863272,865386717,865795870,866149497,866479831,867036522,867436187,867827295,868070005,868473758,868735959,868996649,869136548,869684444,870128238,870550705,870843120,871210593,871515758,871763546,871938336,872228427,872566267,872820144,873017726,873186684,873403111,873532762,873641250,873739610,874477081,875076665,875679677,876108571,876688872,877132245,877546370,877836732,878332396,878809979,879219453,879526866,879874283,880210555,880462403,880658690,880935686,881482498,881891706,882268216,882530497,882921935,883157314,883420013,883557950,883967379,884238722,884493386,884643834,884881219,885036949,885171434,885245677,885608349,886121315,886536766,886881003,887190541,887541676,887797038,888014060,888185101,888573773,888811709,889059222,889196713,889454112,889595471,889730745,889793746,890155904,890449810,890702512,890866535,891072827,891253129,891388632,891476076,891634982,891832736,891960407,892064528,892143962,892254142,892308187,892355544,892376924,893227015,894001685,894754645,895382430,896089509,896737947,897323766,897806050,898390237,899061283,899658314,900176178,900651837,901182634,901585568,901954948,902280406,903009617,903588904,904161074,904566986,905169174,905600521,906021222,906294147,906821819,907289191,907705199,908002402,908359409,908669740,908920774,909107657,909498481,910205350,910787353,911326148,911769870,912328830,912731723,913121319,913357122,913959525,914388125,914807045,915079711,915477324,915757012,916014594,916172026,916618028,917101788,917501390,917837510,918172409,918513784,918764911,918965334,919179937,919554570,919797177,920027101,920157176,920394621,920532286,920669228,920730194,921406604,922032594,922630201,923097785,923623801,924106237,924512294,924830626,925252747,925771487,926184484,926535184,926825112,927199951,927447544,927669362,927826431,928399933,928814724,929240279,929503895,929915149,930188215,930440512,930595641,930950713,931249918,931500570,931667727,931875050,932062415,932194278,932286884,932530779,933075398,933484621,933862181,934124286,934515900,934748269,935011161,935148926,935558849,935829772,936085305,936234928,936472832,936628860,936763118,936837369,937109815,937444736,937700519,937891981
};

bool isRound(int a) {
	if (!a) return false;
	int cZero = 0;
	int cOne = 0;
	while (a) {
		if (a & 1) {
			cOne++;
		}
		else {
			cZero++;
		}
		a >>= 1;
	}
	return cZero >= cOne;
}

int main()
{
	int start, finish;

	while (scanf("%d%d", &start, &finish) != EOF) {
		int s = start / 1000000;
		int scnt = dp[s];
		for (int i = s * 1000000 + 1; i <= start; i++) {
			if (isRound(i)) scnt++;
		}
		int f = finish / 1000000;
		int fcnt = dp[f];
		for (int i = f * 1000000 + 1; i <= finish; i++) {
			if (isRound(i)) fcnt++;
		}

		if (isRound(start)) fcnt++;
		printf("%d\n", fcnt - scnt);
	}

    return 0;
}

如果有问题,欢迎大家指正!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值