[NKU]sweet @ Google && TopCoder && CodeForces

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            33 Posts :: 1 Stories :: 15 Comments :: 0 Trackbacks

          #

          昨晚,我們進(jìn)行了會(huì)議,議定了做題方案,以及各種情況的處理方法,得到結(jié)論:打好開局,不要慌亂。

          早上準(zhǔn)時(shí)起床,吃早飯,一切正常,不慌不亂……扛著一箱子書+模版,我們上三樓……八點(diǎn)半,比賽準(zhǔn)時(shí)開始。

          拿到題后按照之前的計(jì)劃分工讀題,我倒著,SXJ正著,MXD中間,很快MXD發(fā)現(xiàn)D題是熱身賽我們做出的那道題目的三維擴(kuò)展,于是我和SXJ一起做,SXJ繼續(xù)讀題。做到一半,MXD讀到 B題,激動(dòng)地喊出:梅森數(shù)!B的題意是給你一個(gè)<258的數(shù)n,讓你判2^n+1是不是素?cái)?shù),這個(gè)就是梅森數(shù)……他想起了他的課本上有個(gè)表,找到 表,我打表上交……似乎judge出了點(diǎn)毛病,一直都沒有判……期間,我和SXJ繼續(xù)寫D,寫完上交,WA了……然后我發(fā)現(xiàn)一個(gè)低級(jí)錯(cuò)誤修改后再交,依然 WA。同時(shí)MXD讀題、觀察全場,發(fā)現(xiàn)似乎沒有別的題比較好做,于是我們?nèi)齻€(gè)人一同做D題,在此途中,我要求RejudgeB,返回AC……此時(shí)我和 SXJ繼續(xù)做D題,MXD讀題,觀察場上,發(fā)現(xiàn)E題有人通過了。我們決定做完D題再看下一道。我們?nèi)齻€(gè)人通過討論做出了D題。不得不感嘆,學(xué)習(xí)要求甚 解……我們那道二維的猜出了結(jié)論,三維的就猜不出了……推了半天,接下來我們閱讀E題,E題意是這樣:長度70的150個(gè)子串,在一個(gè)10^6的母串里匹 配,問出現(xiàn)次數(shù)最多的串。大概兩種想法,一種是KMP、Rabin-Karp系列的算法硬水,一種是SA。我們發(fā)現(xiàn)場上有十幾個(gè)隊(duì)伍通過了E題,估計(jì)不是 SA(SA不會(huì)普及成這樣吧……),于是我照TC模版寫了個(gè)KMP,交上去,TLE……我們覺得KMP系算法應(yīng)該是超時(shí)的,于是我和MXD一起想E題的后 綴數(shù)組,SXJ繼續(xù)讀題,觀察全場,發(fā)現(xiàn)其他題有隊(duì)伍通過了,但是那些題都在我們能力范圍之外……我們平時(shí)后綴數(shù)組寫的就少,這時(shí)硬想心里也沒底……眼看 Rank就掉出前60,要拿鐵了……我們繼續(xù)沉著冷靜……討論了半天,我想出了一個(gè)可能對(duì)的方法。我們決定再水一下,用別的KMP模版重寫E題,如果不過 再用后綴數(shù)組搞下。SXJ重寫了E題,提交后錯(cuò)誤。由于TLE是優(yōu)先于WA的,我們看到了希望……我注意到一個(gè)題目理解問題,如果答案是0,是輸出所有串 還是不輸出……詢問了Judge,得到了一個(gè)不置可否的回答。SXJ按照另一種理解修改后通過。這時(shí)Rank45,之后我們討論了其他問題,但是無所斬 獲。封榜前Rank47,不拿鐵的目標(biāo)算是完成了……可惜我們WA太多,沒能拿到Ag……

          接下來一個(gè)小時(shí)完全進(jìn)入牛校的Show Time,先是清華的隊(duì)屢屢過題后狂喊:牛13!,然后是北大的隊(duì)伍最后一分鐘過題(那隊(duì)真是慢熱型,前3小時(shí)始終落后于我們,但是最后題該出的都出了……金牌第二……)

          下午無聊……晚上頒獎(jiǎng),順利拿到Cu……外加ICPC第30名的排名證書(那個(gè)證書只有前30才有……RP好啊)

          晚上宴會(huì),大吃一頓,然后回賓館上網(wǎng)了……

          總體來講,我們沒有失誤,B題那個(gè)表是有點(diǎn)超常發(fā)揮了,發(fā)揮中規(guī)中矩。300銅500銀1000金這個(gè)定律果然不假……我們的戰(zhàn)斗力果然只有銅……

          身 為菜鳥首秀,基本上可以滿意……但是今年我們想要拿Ag,需要一些超常發(fā)揮,今后想要拿Au,就得向1000發(fā)展……任重而道遠(yuǎn),不過我還年輕,還有很多 時(shí)間……看看TC上的紅牛前幾,前5中,樓爺基本是對(duì)數(shù)型增長……有的BT黃幾次就紅了,那些人的天賦我們是學(xué)不來的,要學(xué)就學(xué)7、8名之后那些人,人家 是練出來的。從綠掙扎到紅,奮斗了兩三年……

          好在我才大一,還花的起這2~3年,F(xiàn)ight,Sweet!
          posted @ 2010-08-21 15:46 sweetsc 閱讀(153) | 評(píng)論 (0)編輯 收藏

          諸位,Welcome~

          前一陣一直在用人人……后來感覺還是要有個(gè)技術(shù)Blog……于是決定把這里復(fù)活……

          我會(huì)主要在這里寫一些關(guān)于ACM/ICPC、Topcoder、以及其它競賽的文章
          競賽不是全部,我也會(huì)寫一些感興趣的相關(guān)技術(shù)……
          盡管是在javablog,而且我本意很想寫成java的,但是有時(shí)還是難免使用C++,因?yàn)樵诟傎愔惺褂胘ava,有利也有弊……

          從ACM界退休之后,更多的是認(rèn)識(shí)到自己的不足:ACM競賽盡管很有意義,但是也有其局限性……解題或者說解決問題固然重要,找到問題才是最重要的;
          而且有好多問題,是在競賽中遇不到的。于是我表示,為了快點(diǎn)跟上實(shí)驗(yàn)室主流的步伐,爭取每天在Days的基礎(chǔ)上,再寫一篇技術(shù)Blog……
          好吧,這每天一篇壓力太大了……外加近日壓力很大,主要是受到外界的壓力,一個(gè)月一篇都無法保證……不過無論如何,我還是會(huì)刷題,繼續(xù)學(xué)點(diǎn)算法知識(shí),為人生第10個(gè)賽季,NKU -> HOT ENCORE做準(zhǔn)備,在有參賽資格的情況下,我永遠(yuǎn)是NKU的ACM/ICPC contestant,會(huì)向著Au或許緩慢但是堅(jiān)定的邁進(jìn)……

          近況神馬的詳見人人吧……
          好好寫日志,爭取讓讀者們有所收獲……
          posted @ 2010-07-26 21:41 sweetsc 閱讀(124) | 評(píng)論 (0)編輯 收藏

          題目要求:
          給出一個(gè)整數(shù)A,求它的B次冪的所有因數(shù)的和
          (0 <= A,B <= 50000000)
          樣例:A=2,B=3,則答案是1+2+4+8=15
          算法:
          看到數(shù)據(jù)范圍巨大,硬搞是不成的

          根據(jù)唯一分解定理,A可以分解成一系列質(zhì)數(shù)的冪的形式:
          A=p1^a1 * P2^a2.....*Pn^an
          (P1,P2……是質(zhì)數(shù))
          所以,A^B=p1^(a1*B) * P2*(a2*B).....Pn^(an*B)
          然后,A^B的因數(shù),設(shè)某個(gè)因數(shù)為C,則C可以表示成
          C=p1^c1 * p2^c2……* pn^cn
          其中0<=ci<=ai*B
          這樣一來,給所有因數(shù)求和,就相當(dāng)給所有形如C的數(shù)求和
          接下來通過合并同類項(xiàng),得到一個(gè)簡潔的形式
          sum=(1+p1+p1^2..+p1^(a1*B))(1+p2+p2^2...+p2^(a2*b)).....(1+pn+pn^2+....+pn^(an*B))
          分別把每項(xiàng)中的等比數(shù)列求和算出相乘即可

          這道題還有一個(gè)小Trick:
          為了避免高精度計(jì)算,答案需要Mod9901輸出,但是這導(dǎo)致直接應(yīng)用(p^(n+1)-1)/(p-1)的公式進(jìn)行等比數(shù)列求和行不通
          因?yàn)閜-1和9901不見得就互素,經(jīng)查閱資料,得到了一個(gè)基于二分法的方法:
          1+p1+p1^2+....+p1^n=p1^(n/2)*(1+p1+.....+p1^(n/2-1))
          問題得到解決
           1 import java.util.*;
           2 
           3 
           4 public class Main {
           5 
           6     static long modPow(long a,long n)
           7     {
           8         long MOD=9901;
           9         if (n==1return a%MOD;
          10         long tmp=modPow(a,n>>1);
          11         tmp=tmp*tmp%MOD;
          12         if ((n&1)==1) tmp=tmp*a%MOD;
          13         return tmp;
          14     }
          15 
          16     static long myPow(long a,long n)
          17     {
          18         if (n==0return 1;
          19         long ans=modPow(a,(n>>1)+1);
          20         ans=(ans+1)%9901;
          21         if ((n&1)==1)
          22             ans=ans*myPow(a,n>>1)%9901;
          23         else
          24         {
          25             ans=ans*myPow(a,(n-1)>>1)%9901;
          26             ans=ans+modPow(a,n>>1);
          27         }
          28         return ans%9901;
          29     }
          30 
          31     public static void main(String[] args) {
          32         Scanner cin=new Scanner(System.in);
          33         long a=cin.nextLong();
          34         long b=cin.nextLong();
          35         long ans=1;
          36         for (long i=2;i*i<=a;i++)
          37         if (a%i==0)
          38         {
          39             long pow=0;
          40             while (a%i==0)
          41             {
          42                 a/=i;
          43                 pow++;
          44             }
          45             pow*=b;
          46             ans=ans*myPow(i,pow)%9901;
          47         }
          48         if (a!=1)
          49             ans=ans*myPow(a,b)%9901;
          50         System.out.println((ans+9901)%9901);
          51     }
          52 }
          53 


          posted @ 2010-02-22 17:42 sweetsc 閱讀(1470) | 評(píng)論 (0)編輯 收藏


          再次介紹我自己,OI界摸爬滾打5年半的老菜鳥,ACM/ICPC摸爬滾打半年的09級(jí)新人……
          為啥轉(zhuǎn)移到了javablog呢?
          今后爭取把主語言轉(zhuǎn)為java……
          不過這里的代碼不見得都是java,畢竟ICPC題,java的IO還是很吃虧的,TC爭取都java……

          今天寫計(jì)算機(jī)科學(xué)概論論文,順道寫了個(gè)題:SPOJ 21

              給出n條記錄(n<=100000),形如 03 10103538 2222 1233 6160 0142
              要求將它們按字典序排序,并且統(tǒng)計(jì)每組記錄的出現(xiàn)次數(shù)
              例如:
              6
              03 10103538 2222 1233 6160 0142
              03 10103538 2222 1233 6160 0141
              30 10103538 2222 1233 6160 0141
              30 10103538 2222 1233 6160 0142
              30 10103538 2222 1233 6160 0141
              30 10103538 2222 1233 6160 0142
              輸出:
              03 10103538 2222 1233 6160 0141 1
              03 10103538 2222 1233 6160 0142 1
              30 10103538 2222 1233 6160 0141 2
              30 10103538 2222 1233 6160 0142 2

          算法:10000為基的基數(shù)排序+10000的計(jì)數(shù)排序

          復(fù)雜度O(N)

            1 #include <cstdio>
            2 #include <cstring>
            3 
            4 inline int nextInt()
            5 {
            6     int ans=0;
            7     for (;;)
            8     {
            9         char c=getchar();
           10         if (c<'0'||c>'9')
           11             break;
           12         ans=(ans<<3)+(ans<<1)+c-'0';
           13     }
           14     return ans;
           15 }
           16 
           17 struct node
           18 {
           19     int key[7];
           20 };
           21 bool operator ==(node a,node b)
           22 {
           23     for (int i=0;i<7;i++)
           24         if (a.key[i]!=b.key[i])
           25             return 0;
           26     return 1;
           27 }
           28 
           29 inline void nextNode(node &ans)
           30 {
           31     ans.key[0]=nextInt();
           32     int tmp=0;
           33     for (int i=0;i<4;i++)
           34     {
           35         char c=getchar();
           36         tmp=(tmp<<3)+(tmp<<1)+c-'0';
           37     }
           38     ans.key[1]=tmp;
           39     for (int i=2;i<7;i++)
           40         ans.key[i]=nextInt();
           41     getchar();
           42 }
           43 
           44 node arr[100010];
           45 
           46 int cnt[10010];
           47 int n;
           48 int arr1[100010];
           49 int arr2[100010];
           50 int *now;
           51 int *sorted;
           52 
           53 int KEY[100010];
           54 
           55 void mysort(int s)
           56 {
           57     memset(cnt,0,sizeof(cnt));
           58     for (int i=0;i<n;i++)
           59         KEY[i]=arr[now[i]].key[s];
           60     for (int i=0;i<n;i++)
           61         cnt[KEY[i]]++;
           62     for (int i=1;i<=10000;i++)
           63         cnt[i]+=cnt[i-1];
           64     for (int i=n-1;i>=0;i--)
           65         sorted[--cnt[KEY[i]]]=now[i];
           66 }
           67 
           68 void printNode(node a)
           69 {
           70     printf("%02d ",a.key[0]);
           71     printf("%04d%04d",a.key[1],a.key[2]);
           72     for (int i=3;i<7;i++)
           73         printf(" %04d",a.key[i]);
           74 }
           75 
           76 int main()
           77 {
           78     int nn=nextInt();
           79     while (nn--)
           80     {
           81         n=nextInt();
           82         now=arr1;
           83         sorted=arr2;
           84         for (int i=0;i<n;i++)
           85         {
           86             nextNode(arr[i]);
           87             now[i]=i;
           88         }       
           89         for (int i=6;i>=0;i--)
           90         {
           91             mysort(i);
           92             int *tmp=now;
           93             now=sorted;
           94             sorted=tmp;
           95         }
           96         for (int i=0,j=i;i<n;i=j)
           97         {
           98             node Now=arr[now[i]];
           99             int cnt=0;
          100             for (;Now==arr[now[j]];j++,cnt++);
          101             printNode(arr[now[i]]);
          102             printf(" %d\n",cnt);
          103         }
          104         if (nn) putchar(10);
          105         getchar();
          106     }
          107     return 0;
          108 }
          posted @ 2010-02-21 18:05 sweetsc 閱讀(133) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共4頁: 上一頁 1 2 3 4 
          主站蜘蛛池模板: 报价| 大安市| 阿鲁科尔沁旗| 辽宁省| 抚松县| 若尔盖县| 邹城市| 常州市| 建水县| 特克斯县| 宜春市| 民权县| 深水埗区| 齐齐哈尔市| 双牌县| 乐山市| 山东省| 临江市| 溧阳市| 娄烦县| 息烽县| 封丘县| 牡丹江市| 利辛县| 阿克陶县| 炉霍县| 武冈市| 万宁市| 怀安县| 洛扎县| 武陟县| 景洪市| 准格尔旗| 桂平市| 原平市| 平潭县| 浠水县| 荥经县| 永善县| 昭苏县| 巴林右旗|