BZOJ 1695 [Usaco2007 Demo]Walk the Talk 链表+数学
来源:互联网 发布:浪潮java面试题 编辑:程序博客网 时间:2024/06/08 00:54
题意:链接
方法:乱搞
解析:
出这道题的人存心报复社会。
首先这个单词表…先上网上找这个单词表…
反正总共2265个单词,然后就考虑怎么做就行了。
刚开始我没看表,找不到怎么做,最快的方法我也只是想到了类n^6的做法。
然后我就卡关辣,这关怎么过!
神犇的方法是:观察表,发现规律:
发现表中的单词最长就是4个字母。
所以我们可以考虑求1,2,3,4长度的单词数。
1的话可以直接记录,扫的时候顺带加上就行。
然后神犇说了一句话:
表中长度为4的单词前两个字母相同的单词个数不超过35个。
长度为3前一个字母相同的单词个数不超过7个。
所以直接上链表优化啊?
这样的话就要求我们预处理什么呢?
预处理点(i,j)右上角字母x的出现次数。
预处理点(i,j)右上角后缀xy的出现次数。
这个怎么维护啊?
容斥原理啊,所以复杂度在26*26*nm左右,也就是4次方,可以接受。
所以我们只需要枚举开头的两个字母,这是n^4的复杂度,然后再加上链表,枚举次数不超过43=(35+7),而提取个数因为我们的预处理,变成辣O1啊,所以这样的话总共的复杂度是在n^5的!
掉了一个n啊!这不就能过了吗!
orz出题人。
单词表:
AAAAAAAAAAABBEABEDABETABLEABLYABUTACEACESACHEACIDACMEACNEACREACTADADDADDSADOADSAFARAFTAGARAGEAGEDAGERAGESAGOAGOGAGUEAHAIDAIDEAIDSAILAIMAIMSAIRAIRSAIRYAJARAKINALASALBAALEALEEALGAALLALLYALMAALMSALOEALSOALUMAMAMENAMIDAMMOAMOKAMYLANANALANDANEWANONANTANTEANTIANTSANUSANYAPEAPEDAPESAPEXAPSEAPTAQUAARCARCHARCSAREAREAARIDARKARMARMSARMYARTARTSASASHASKASKSASPASSATATEATOMATOPAUNTAURAAUTOAVERAVIDAVOWAWAYAWEAWEDAWLAWLSAWRYAXAXEDAXERAXESAXISAXLEAXONAYEAYESBABEBABYBACKBADBADEBAGBAGSBAHBAILBAITBAKEBALDBALEBALKBALLBALMBANBANDBANEBANGBANKBANSBARBARBBARDBAREBARKBARNBARSBASEBASHBASKBASSBATBATHBATSBAUDBAWLBAYBAYSBEBEADBEAKBEAMBEANBEARBEATBEAUBECKBEDBEDSBEEBEEFBEENBEEPBEERBEESBEETBEGBEGSBELLBELTBELYBENDBENTBESTBETBETABETSBEVYBIASBIBBIBSBIDBIDEBIDSBIERBIGBIKEBILEBILKBILLBINBINDBINGBINSBIRDBITBITEBITSBLABBLEDBLEWBLIPBLOBBLOCBLOTBLOWBLUEBLURBOABOARBOATBOBBOBSBODEBODYBOGBOGSBOILBOLDBOLLBOLTBOMBBONDBONEBONGBONYBOOBOOBBOOKBOOMBOONBOORBOOSBOOTBOREBORNBOSSBOTHBOUTBOWBOWLBOWSBOXBOYBOYSBRABRAEBRAGBRANBRASBRATBRAYBREDBREWBRIGBRIMBROWBUCKBUDBUDSBUFFBUGBUGSBULBBULKBULLBUMBUMPBUMSBUNBUNKBUNSBUNTBUOYBURLBURNBURPBURYBUSBUSHBUSSBUSTBUSYBUTBUTTBUYBUYSBUZZBYBYEBYTECABCABSCAFECAGECAKECALFCALLCALMCAMCAMECAMPCANCANECANSCANTCAPCAPECAPSCARCARDCARECARPCARSCARTCASECASHCASKCASTCATCATSCAVECAWCEDECELLCENTCHAPCHARCHATCHEFCHEWCHICCHINCHIPCHITCHOPCHUMCITECITYCLADCLAMCLANCLAPCLAWCLAYCLIPCLODCLOGCLOTCLUBCLUECOALCOATCOAXCOCACOCKCOCOCODCODECOEDCOGCOGSCOILCOINCOKECOLDCOLTCOMBCOMECONCONECOOCOOKCOOLCOONCOOPCOPCOPECOPSCOPYCORDCORECORKCORNCOSTCOSYCOTCOTSCOVECOWCOWLCOWSCOZYCRABCRAGCRAMCREWCRIBCROPCROWCRUDCRUXCRYCUBCUBECUBSCUECUEDCUESCUFFCULLCULTCUPCUPSCURBCURDCURECURLCURSCURTCUSPCUTCUTECUTSCYSTCZARDADDADSDALEDAMDAMEDAMNDAMPDAMSDAREDARKDARNDARTDASHDATADATEDAWNDAYDAYSDAZEDEADDEAFDEALDEANDEARDEBTDECKDEEDDEEMDEEPDEERDEFYDELLDEMODENDENSDENTDENYDESKDEUSDEWDEWYDIALDICEDIDDIEDIEDDIEMDIESDIETDIGDIGSDIKEDILLDIMDIMEDIMSDINDINEDINGDINTDIPDIPSDIREDIRTDISCDISHDISKDIVEDODOCKDOEDOERDOESDOGDOGSDOLEDOLLDOMEDONDONEDONSDOOMDOORDOPEDOSEDOTDOTEDOTSDOVEDOWNDOZEDRABDRAGDRAMDRAWDREWDRIPDROPDRUGDRUMDRYDUALDUBDUBSDUCKDUCTDUDDUEDUELDUESDUETDUGDUKEDULLDULYDUMBDUMPDUNEDUNGDUNKDUPEDUSKDUSTDUTYDYADDYEDYEDDYERDYESDYNEEACHEAREARLEARNEARSEASEEASTEASYEATEATSEBBEBBSECHOEDDYEDGEEDITEELEELSEGGEGGSEGOEGOSEKEEKEDEKESELFELKELKSELMELMSELSEEMEMITENENDENDSENVYEPICERAERASEREERGERGOERRERRSESPYETETCHEVENEVEREVILEWEEWESEXEXAMEXECEXITEYEEYEDEYEREYESFACEFACTFADEFAGFAGSFAILFAINFAIRFAKEFALLFAMEFANFANGFANSFARFAREFARMFASTFATFATEFATSFAUNFAWNFAZEFEARFEATFEDFEEFEEDFEELFEESFEETFELLFELTFENFENDFERNFEUDFEWFIATFIBFIEFFIFEFIGFIGSFILEFILLFILMFINFINDFINEFINKFINSFIRFIREFIRMFISHFISTFITFITSFIVEFIXFLAGFLAKFLAMFLAPFLATFLAWFLAXFLEAFLEDFLEEFLEWFLEXFLIPFLITFLOGFLOPFLOWFLUFLUEFLUXFLYFOALFOAMFOBFOCIFOEFOESFOGFOGSFOGYFOILFOLDFOLKFONDFONTFOODFOOLFOOTFORFORDFOREFORKFORMFORTFOULFOURFOWLFOXFRAYFREEFRETFROFROGFROMFRYFUELFULLFUMEFUNFUNDFUNKFURFURSFURYFUSEFUSSFUZZGABGADGAGGAGSGAINGAITGALEGALLGAMEGANGGAPGAPEGAPSGARBGASGASHGASPGATEGAVEGAWKGAYGAZEGEARGELGELDGELSGEMGEMSGENEGENTGERMGETGETSGIFTGIGGILDGILLGILTGINGINSGIRDGIRLGIRTGISTGIVEGLADGLEEGLENGLOWGLUEGLUTGNATGNAWGNUGOGOADGOALGOATGODGODSGOESGOLDGOLFGONEGONGGOODGOOFGOREGORYGOSHGOTGOUTGOWNGRABGRADGRAMGRAYGREWGREYGRIDGRIMGRINGRIPGRITGROWGRUBGULFGULLGULPGUMGUMSGUNGUNSGURUGUSHGUSTGUTGUTSGUYGUYSGYROHAHACKHADHAGHAILHAIRHALEHALFHALLHALTHAMHAMSHANDHANGHAPHARDHAREHARKHARMHARPHARTHASHASHHATHATEHATSHAULHAVEHAWKHAYHAZEHAZYHEHEADHEALHEAPHEARHEATHECKHEEDHEELHEIRHELDHELLHELMHELPHEMHEMPHEMSHENHENSHERHERBHERDHEREHEROHERSHEWHEWSHEXHEYHIHICKHIDHIDEHIGHHIKEHILLHILTHIMHINDHINTHIPHIPSHIREHISHISSHITHITSHIVEHOARHOEHOESHOGHOGSHOLDHOLEHOLYHOMEHOMOHONEHOODHOOFHOOKHOOPHOOTHOPHOPEHOPSHORNHOSEHOSTHOTHOURHOWHOWLHUBHUBSHUEHUESHUGHUGEHUHHULLHUMHUMPHUMSHUNGHUNKHUNTHURLHURTHUSHHUSKHUTHUTSHYMNIBEXIBIDIBISICEICEDICESICONICYIDEAIDEMIDLEIDLYIDOLIFILLILLSILLYIMPIMPSININCHINKINKSINNINNSINTOIONIONSIOTAIREIRESIRISIRKIRKSIRONISISLEITITCHITEMITSIVYJABJABSJACKJADEJAILJAMJAMSJARJARSJAWJAWSJAYJAZZJEANJEEPJEERJERKJESTJETJETSJIGJIGSJOBJOBSJOGJOGSJOINJOKEJOLTJOTJOTSJOYJOYSJUDOJUGJUGSJUMPJUNKJUREJURYJUSTJUTKEELKEENKEEPKENKEPTKERNKEYKEYSKICKKIDKIDSKILLKINKINDKINGKINKKISSKITKITEKITSKNEEKNEWKNITKNOBKNOTKNOWKUDOLABLABSLACELACKLACYLADLADSLADYLAGLAGSLAIDLAINLAIRLAKELAMBLAMELAMPLANDLANELAPLAPSLARDLARKLASHLASSLASTLATELAVALAWLAWNLAWSLAXLAYLAYSLAZYLEADLEAFLEAKLEANLEAPLEDLEELEEKLEERLEESLEFTLEGLEGSLENDLENSLENTLESSLESTLETLETSLEVYLEWDLIARLICELICKLIDLIDSLIELIEDLIENLIESLIEULIFELIFTLIKELILYLIMBLIMELIMPLINELINKLINTLIONLIPLIPSLISPLISTLITLIVELOADLOAFLOANLOBELOCILOCKLOFTLOGOLOGSLOINLONELONGLOOKLOOMLOONLOOPLOOTLORDLORELOSELOSSLOSTLOTLOTSLOUDLOUTLOVELOWLOWSLUCKLULLLUMPLUNGLURELURKLUSHLUSTLUTELYNXLYREMACEMADMADEMAIDMAILMAIMMAINMAKEMALEMALLMALTMAMAMANMANEMANYMAPMAPSMAREMARKMARTMASHMASKMASSMASTMATMATEMATHMATSMAULMAZEMEMEADMEALMEANMEATMEEKMEETMELTMEMOMENMENDMENSMENUMEREMESHMESSMETMETAMETEMETSMEWMEWSMICAMICEMIDMIENMIKEMILDMILEMILKMILLMINDMINEMINIMINKMINTMIREMISSMISTMIXMOANMOATMOBMOBSMOCKMODEMOLDMOLEMONKMOOMOODMOOTMOPMOPSMOREMORNMOSSMOSTMOTHMOVEMOWMOWSMUMUCHMUCKMUDMUFFMUGMUGSMULEMULLMUNGMUSEMUSHMUSKMUSTMUTEMUTTMYMYTHNABNAGNAGSNAILNAMENAPNAPSNARYNAVYNAYNEARNEATNECKNEEDNEONNESTNETNETSNEWNEWTNEXTNICENICKNIGHNILNINENIPNIPSNONODNODENODSNONNONENOOKNOONNORNORMNOSENOTNOTENOUNNOWNUNUDENULLNUMBNUNNUNSNUTNUTSOAFOAKOAKSOAROARSOATOATHOATSOBEYOBOEODDODDSODEODESODOROFOFFOFFSOFTOHOHMOILOILSOILYOKAYOLDOLDYOMENOMITONONCEONEONESONLYONTOONUSONYXOOZEOPALOPENOPTOPTSOPUSORORALORBOREORESORGYOUCHOUROURSOUSTOUTOUTSOVALOVENOVEROWEOWEDOWESOWLOWLSOWNOWNSOXOXENPACEPACKPACTPADPADSPAGEPAIDPAILPAINPAIRPALPALEPALLPALMPALSPANPANEPANGPANSPANTPAPAPARPAREPARKPARSPARTPASSPASTPATPATEPATHPATSPAVEPAWPAWNPAWSPAYPAYSPEAPEAKPEALPEARPEASPEATPECKPEEKPEELPEEPPEERPEGPEGSPELTPENPENDPENSPENTPEPPERPERKPESTPETPETSPEWPEWSPHIPIPICAPICKPIEPIERPIESPIGPIGSPIKEPILEPILLPIMPPINPINEPINGPINKPINSPINTPIONPIPPIPEPISSPITPITHPITSPITYPLANPLAYPLEAPLODPLOTPLOWPLOYPLUGPLUMPLUSPLYPODPODSPOEMPOETPOGOPOKEPOLEPOLLPOLOPOMPPONDPONGPONYPOOLPOORPOPPOPSPOREPORKPORTPOSEPOSHPOSTPOTPOTSPOURPOUTPOXPRAYPREPPREYPRIMPROPRODPROPPROSPROWPRYPUBPUBSPUFFPUKEPULLPULPPUMAPUMPPUNPUNSPUNTPUNYPUPPUPAPUPSPUREPURRPUSPUSHPUSSPUTPUTSPUTTPYREQUAQUADQUAYQUIPQUITQUIZQUORACERACKRAFTRAGRAGERAGSRAIDRAILRAINRAKERAMRAMPRAMSRANRANGRANKRANTRAPRAPERAPSRAPTRARERASHRASPRATRATERATSRAVERAWRAYRAYSRAZEREREADREALREAMREAPREARREDREDOREDSREEDREEFREELREINRELYRENDRENTRESTRHORIBRIBSRICERICHRIDRIDERIDSRIFTRIGRIGSRILLRIMRIMERIMSRINDRINGRINKRIOTRIPRIPERIPSRISERISKRITEROADROAMROARROBROBEROBSROCKRODRODERODSROEROLEROLLROMPROOFROOKROOMROOTROPEROSYROTROTSROUTROVEROWROWSRUBRUBSRUBYRUDERUERUGRUGSRUINRULERUMRUMPRUNRUNGRUNSRUNTRUSHRUSTRUTRUTSRYESACKSADSAFESAGSAGASAGESAGSSAIDSAILSAKESALESALTSAMESANDSANESANGSANKSAPSAPSSARISASHSATSATESAVESAWSAWSSAXSAYSAYSSCABSCANSCARSCOWSCUDSEASEALSEAMSEARSEASSEATSECTSEESEEDSEEKSEEMSEENSEEPSEERSEESSELFSELLSEMISENDSENTSEPTSERFSETSETSSEWSEWSSEXSEXYSHAMSHESHEDSHINSHIPSHITSHODSHOESHOPSHOTSHOWSHUNSHUTSHYSICKSIDESIFTSIGHSIGNSILKSILLSILOSILTSINESINGSINKSINSSIPSIPSSIRSIRESIRSSITSITESITSSITUSIXSIZESKEWSKISKIDSKIMSKINSKIPSKISSKITSKYSLABSLAMSLAPSLATSLAYSLEDSLEWSLIDSLIMSLIPSLITSLOBSLOPSLOTSLOWSLUGSLUMSLURSLYSMOGSMUGSMUTSNAGSNAPSNIPSNOBSNOWSNUBSNUGSOSOAKSOAPSOARSOBSOBSSOCKSODSODASODSSOFASOFTSOILSOLDSOLESOLOSOMESONSONGSONSSOONSOOTSORESORTSOULSOUPSOURSOWSOWNSOYSOYASPASPANSPATSPECSPEDSPINSPITSPOTSPUNSPURSPYSTABSTAGSTARSTAYSTEMSTEPSTEWSTIRSTOPSTOWSTUBSTUDSTUNSUBSUBSSUCHSUCKSUDSSUESUEDSUESSUITSULKSUMSUMSSUNSUNGSUNKSUNSSURESURFSWABSWAMSWANSWAPSWATSWAYSWIMSWUMTABTABSTACKTACTTAGTAGSTAILTAKETALETALKTALLTAMETANTANGTANKTAPTAPETAPSTARTARTTASKTAUTAUTTAXTAXITEATEAMTEARTEASTEEMTEENTELLTENTENDTENSTENTTERMTESTTEXTTHANTHATTHAWTHETHEMTHENTHEYTHINTHISTHUDTHUGTHUSTICKTIDETIDYTIETIEDTIERTIESTILETILLTILTTIMETINTINSTINTTINYTIPTIPSTIRETITTITSTOTOADTOETOESTOILTOLDTOLLTOMBTONTONETONSTOOTOOKTOOLTOPTOPSTORETORNTOSSTOURTOWTOWNTOYTOYSTRAPTRAYTREETREKTRIMTRIOTRIPTRODTROTTRUETRYTUBTUBETUBSTUCKTUFTTUGTUGSTUNETURFTURNTWASTWIGTWINTWOTWOSTYPETYPOUGHUGLYUNDOUNITUNTOUPUPONURGEURNURNSUSUSEUSEDUSERUSESVAINVALEVANVANEVANSVARYVASEVASTVATVATSVEALVEERVEILVEINVENTVERBVERYVESTVETOVEXVIAVIALVICEVIEVIEDVIERVIESVIEWVILEVINEVISAVITAVOIDVOLTVOTEVOWVOWSWADEWAFTWAGWAGEWAGSWAILWAITWAKEWALKWALLWANWANDWANEWANTWARWARDWAREWARMWARNWARPWARSWARTWARYWASWASHWASPWAVEWAXWAXYWAYWAYSWEWEAKWEANWEARWEBWEBSWEDSWEEWEEDWEEKWEEPWELDWELLWENTWEPTWEREWESTWETWETSWHATWHENWHIMWHIPWHITWHIZWHOWHOMWHYWICKWIDEWIFEWIGWIGSWILDWILEWILLWILTWILYWINWINDWINEWINGWINKWINSWIPEWIREWIRYWISEWISHWISPWITWITHWITSWOEWOKEWOLFWOMBWONWONTWOOWOODWOOFWOOLWOOSWORDWOREWORKWORMWORNWOVEWRAPWRENWRITYANKYARDYARNYAWNYEAYEARYEASYELLYELPYESYETYOKEYONYOUYOURZEALZEROZESTZINCZONEZOOZOOMZOOS
代码:(因单词表在上方给出,所以此处略)
#include <cstdio>#include <string>#include <cstring>#include <iostream>#include <algorithm>#define N 35using namespace std;string d[2265];int map[N][N];int sum1[N][N][N];int sum2[N][N][N][N];int fuck[N][N][N][N];int head[N][N];int head2[N][N];int v[N];int v1[N][N];int cnt,cnt2;int n,m;struct node{ int fromx,fromy,x,y,next;}edge[2265],edge2[2265];void init(){ memset(head,-1,sizeof(head)); memset(head2,-1,sizeof(head2)); cnt=1,cnt2=1;}void edgeadd(int fromx,int fromy,int to){ edge[cnt].fromx=fromx,edge[cnt].fromy=fromy; edge[cnt].x=to; edge[cnt].next=head[fromx][fromy]; head[fromx][fromy]=cnt++;}void edgeadd2(int fromx,int fromy,int to,int to2){ edge2[cnt2].fromx=fromx,edge2[cnt2].fromy=fromy; edge2[cnt2].x=to,edge2[cnt2].y=to2; edge2[cnt2].next=head2[fromx][fromy]; head2[fromx][fromy]=cnt2++;}char s[N];int main(){ //此处放单词表,多背单词少刷水!!!!!!!!!!!!!!!! init(); for(int i=0;i<=2264;i++) { int len=d[i].size(); switch(len) { case 1:v[d[i][0]-'A']=1;break; case 2:v1[d[i][0]-'A'][d[i][1]-'A']=1;break; case 3:edgeadd(d[i][0]-'A',d[i][1]-'A',d[i][2]-'A');break; case 4:edgeadd2(d[i][0]-'A',d[i][1]-'A',d[i][2]-'A',d[i][3]-'A');break; } } scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%s",s+1); for(int j=1;j<=m;j++) { map[i][j]=s[j]-'A'; } } for(int i=0;i<26;i++) { for(int j=1;j<=n;j++) { for(int k=m;k>=1;k--) { sum1[i][j][k]=sum1[i][j-1][k]+sum1[i][j][k+1]-sum1[i][j-1][k+1]+(map[j][k]==i); fuck[map[j][k]][i][j][k]=sum1[i][j][k]-(map[j][k]==i); } } } for(int i=0;i<26;i++) { for(int j=0;j<26;j++) { for(int k=1;k<=n;k++) { for(int l=m;l>=1;l--) { sum2[i][j][k][l]=sum2[i][j][k-1][l]+sum2[i][j][k][l+1]-sum2[i][j][k-1][l+1]+fuck[i][j][k][l]; } } } } int ans=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(v[map[i][j]])ans++; for(int x=i;x>=1;x--) { for(int y=j;y<=m;y++) { if(x==i&&y==j)continue; if(v1[map[i][j]][map[x][y]])ans++; for(int k=head[map[i][j]][map[x][y]];k!=-1;k=edge[k].next) { int to=edge[k].x; ans+=sum1[to][x][y]-(map[x][y]==to); } for(int k=head2[map[i][j]][map[x][y]];k!=-1;k=edge2[k].next) { int to=edge2[k].x; int to2=edge2[k].y; ans+=sum2[to][to2][x][y]-fuck[to][to2][x][y]; } } } } } printf("%d\n",ans);}
0 0
- BZOJ 1695 [Usaco2007 Demo]Walk the Talk 链表+数学
- BZOJ 1694 [Usaco2007 Demo]Grazing on the Run DP
- TOJ 1642 Walk the Talk -- Trie + dp
- POJ 3043 Walk the Talk 笔记
- BZOJ 1628: [Usaco2007 Demo]City skyline
- BZOJ 1629: [Usaco2007 Demo]Cow Acrobats
- 【BZOJ 1629】 [Usaco2007 Demo]Cow Acrobats
- BZOJ 1693 [Usaco2007 Demo]Asteroids 最大流
- 贪心-BZOJ-1628-[Usaco2007 Demo]City skyline
- [bzoj] 1628: [Usaco2007 Demo]City skyline
- BZOJ 1628: [Usaco2007 Demo]City skyline
- BZOJ 1629: [Usaco2007 Demo]Cow Acrobats
- BZOJ[1693][Usaco2007 Demo]Asteroids 网络流
- 1694: [Usaco2007 Demo]Grazing on the Run
- 【BZOJ】1628 [Usaco2007 Demo]City skyline 单调栈
- bzoj 1629: [Usaco2007 Demo]Cow Acrobats(贪心排序)
- bzoj 1628 && 1683: [Usaco2007 Demo]City skyline(模拟)
- bzoj 1693: [Usaco2007 Demo]Asteroids(二分匹配)
- 图结构练习——BFSDFS——判断可达性--------BFS——从起始点到目标点的最短步数
- OC类的深入研究
- 【Maven】跳过test测试直接进行编译打包
- SVM 多分类 -SVM分类opencv3.0源代码
- (一二四)tableView的多组数据展示和手动排序
- BZOJ 1695 [Usaco2007 Demo]Walk the Talk 链表+数学
- python笔记:深刻理解Python中的元类(metaclass)
- poj-3126-Prime Path-BFS
- git 提交前撤销add操作
- tools:context=".MainActivity的作用
- js弹出框、对话框、提示框、弹窗总结
- poj-3126 Prime Path
- android通知 notification
- POJ 1012 Joseph