1. 程式人生 > >【總結】[NOIP]提高難度以下題目彙總①

【總結】[NOIP]提高難度以下題目彙總①

前言

現在已經準備好從1997年NOIP(普及&提高)的題做到2016年了 這20年的題目洛谷上都有
因為提高難度以下的題目比較簡單 就簡單的彙總來寫 概括一下每一個題的核心 這是第一彈 提高難度以上的題會一個一個寫的

題目列表

NOIP題目
NOIP題目
NOIP題目
NOIP題目

總結

*時間關係不加連結了 按洛谷的難度順序排序

NOIP2005普及組T1 P1046 陶陶摘蘋果:
按題意模擬即可 注意加板凳長度 可練離散化優化

NOIP2010普及組 P1179 數字統計:
從L到R一個數一個數的找即可 能%2就total++ 然後/=10

NOIP2002普及組 P1035 級數求和:
按照1+1/2+1/3+…+1/n一直加 加到符合題意就停 輸出

NOIP2016普及組 P1909 買鉛筆:
需要送到sort 從最實惠的開始買一直到買完

NOIP2012普及組T1 P1075 質因數分解:
從2開始尋找 肯定找到小的那個質因數i會比較快 然後用n/i得到答案

NOIP2004普及組T1 P1085 不高興的津津:
還記得新生剛來不會for迴圈int了14個變數…直接迴圈找最不高興的那一天就行了 也可以用線段樹

NOIP2015普及組 P2669 金幣:
入門數論?還是模擬過吧…把for迴圈設計的猥瑣一點按題意模擬(以前我都不會這個題…)

NOIP2013普及組 P1980 計數問題:
基本同數字統計

NOIP2006普及組T1 P1059 明明的隨機數:


sort 去重 統計個數 大概就這樣

NOIP1997提高組&普及組T1 P1548 棋盤問題:
邊長為min{n,m}的正方形個數:

(mmin(nm)+1)(nmin(nm)+1)
長方形加正方形個數:((1+n)(1+m)nm)/4
長方形個數通過上面兩式相減即可得出
所以思路就是 先算出正方形個數 然後用公式得出長方形和正方形個數總和 最後得到長方形個數

NOIP2011普及組T1 P1307 數字反轉:
用字串 每一位拆開翻轉 注意正負

NOIP2005普及組T2 P1047 校門外的樹:
樸素的做法用陣列模擬路然後有樹的地方賦值最後慢慢拔然後統計

NOIP2015普及組 P2670 掃雷遊戲:


二維陣列當地圖 列舉每一個點 是地雷 那麼周圍的空裡值都加1 最後如果是地雷就輸出* 不是就輸出地圖裡的資料

NOIP2004提高組 P1089 津津的儲蓄計劃:
提高組最簡單的題…按照題意模擬津津每個月的經濟流動就好了

NOIP2008普及組T1 P1055 ISBN號碼:
字串模擬 唯一難度是細節多了點 尤其是那個X

NOIP1998普及組 P1008 三連擊:

 cout << "192 384 576" << endl;
 cout << "219 438 657" << endl;
 cout << "273 546 819" << endl;
 cout << "327 654 981" << endl;

NOIP2010普及組 P1190 接水問題:
貪心搞搞 先排序 然後就是挑出接水的人中用時最少的加上下一個正在排隊的人

NOIP2001普及組 P1028 數的計算:

f(n)=f(n1)+f(n/2)遞推遞迴真噁心

NOIP2014普及組 P2141 珠心算測驗:
用一個數組維護一下 掃一遍符合題意就total++

NOIP1999提高組 P1014 Cantor表:
①第k行有k個數②第k行每對數之和是k+1③奇數行從k開始偶數行從1開始(找規律慢慢做吧)

NOIP2008提高組T1 P1125 笨小猴:
字串+模擬+排序+素數判斷 挺好玩的題 把字元換成數字比較方便 素數判斷建議直接樸素

NOIP2007普及組 P1093 獎學金:
結構體+sort很方便 然後按照題意模擬 編個規則 先判斷總分 如果總分相同 就判斷語文分 如果語文分相同 再判斷學號

NOIP2007普及組 P1094 紀念品分組:
看到之後果斷用的貪心 排序之後頭找尾 發現…不對! 於是調出了這麼一個東西——

    int ans=0i=1,j=n;
    while(i<=j){
        if(i==j){
            ans++;i++;j--;break;
        }
        if(a[i]+a[j]<=m){
            ans++;i++;j--;
        }
        else if(a[i]+a[j]>m){
            ans++;j--;
        }
    }
    cout<<ans<<endl;

別問我為什麼..忘了

NOIP2009普及組T2 P1068 分數線劃定:
啥排序任你選 考慮好細節就行(包括多錄取等分的..等等) 推薦結構題 程式碼別太亂了…

NOIP2005提高組T1 P1051 誰拿了最多獎學金:
字串+模擬+排序 題解就在題目中 真的只是考翻譯… 然後算就行

NOIP2014普及組T2 P2118 比例簡化:
基礎數論gcd 直接列舉所有答案 然後每次更新最優解 注意輸出格式

NOIP2011提高組D1T1 P1003 鋪地毯:
模擬 注意地毯鋪的先後順序 後來者居上 所以找到解就輸出

NOIP2009普及組T1 P1067 多項式輸出:
呵呵…
坑死人算了好麼 再見
就是普通的字串模擬 摸死你

NOIP2014提高組D1T1 P1328 生活大爆炸版石頭剪刀布:
“打表”題 情況屈指可數 t==na||nb的時候折回來

NOIP2007提高組T1 P1097 統計數字:
sort 相同的數計數器累加 遇見不同的 輸出 清零

NOIP2002提高組 P1031 均分紙牌:
多個教參上的貪心例題 很經典 平均數貪心慢慢移

NOIP1997提高組&普及組 P2626 斐波那契數列(升級版):
題目主要分為兩步 找到第 n 個斐波那契數然後給那個斐波那契數分解質因數
斐波那契數列+質因數 模擬 注意輸出格式

NOIP1998提高組 P1012 拼數:
核心程式碼

int cmp(string x,string y){
    return (x+y>y+x);
}

NOIP2006普及組T2 P1060 開心的金明:
01揹包模板

NOIP2008提高組 P1149 火柴棒等式:
很煩啊這個題我不會 看題解吧 別忘了加上 + 和 = 的火柴棒

NOIP2016普及組 P2010 迴文日期:
一年一個迴文日期 找到年份生成迴文日期 再看看在不在範圍內 列舉把 感覺挺好的題 一開始我不會…

NOIP2011普及組T2 P1308 統計單詞數:
又是一個比較煩的題 列舉文章中的每個單詞 判斷兩個單詞長度是否相同 列舉單詞中的每個字母 判斷是否都相同 如果都相同則答案加一

NOIP2001普及組T4 P1049 裝箱問題:
竟然是T4!?
【動態規劃】【貪心】動態規劃與貪心的聯絡

NOIP2005普及組T3 P1048 採藥:
T3!? 同開心的金明

NOIP2010提高組 P1540 機器翻譯:
用一個數組維護單詞在不在記憶體中 模擬即可

NOIP2003普及組 P1042 乒乓球:
簡單模擬 注意局數以及獲勝條件

NOIP2002普及組 P1036 選數:
好題誒 用的STL的全排列 但是要用一個數組維護一下 要不然會很尷尬(可以試一下) 素數判斷用樸素或埃氏

NOIP2001普及組 P1030 求先序排列:
樹的基本知識 後序最後一個是根 然後在中序中找到根 然後分成左右兩半 繼續這樣找

NOIP1998提高組 P1011 車站:

f[i]=fibo[i1]b+fibo[i2]a;
斐波那契數列

NOIP2003普及組 P1044 棧:
第一次接觸卡特蘭數 會了就很簡單

f[i]+=f[j]f[ij1];
不會的話..dp?

NOIP2004普及組T2 P1086 花生採摘:
基本模擬+搜尋 注意題目要求
核心

for(int i=1;i<=t;i++){
        if(i==1) if(total+a[i].y+a[i].y-1>k) break;
        if(i!=1) if(total+abs(a[i].y-a[i-1].y)+abs(a[i].z-a[i-1].z)+a[i].y>k) break;
        if(i==1) total+=a[i].y-1;
        if(i!=1) total+=abs(a[i].y-a[i-1].y)+abs(a[i].z-a[i-1].z);
        ans+=a[i].x;
        total++; 
    }

NOIP2012提高組D1T1 P1079 Vigenère 密碼:
打表??差不多吧
有個式子:明文字母=密文字母-金鑰字母
真無聊…

第一部分就先這樣吧 …
COYG