noip普及組考綱+樣題合集——初級篇(OIer必看)


很明顯我是想發提高組合集的。普及組考綱……用發么。

當然如果你想看的話也可以,就一點點:

        遞歸、排序……

  很明顯上面那都不是重點。普及組只要掌握搜索、二分、單調隊列、數學、隨機化等等,一等獎沒問題的,但是要想AK普及組題目的話也不是那么容易,這得有熟練的調試和查細節能力才行。比如noip2017普及組的t3,你可能順手打個搜索就過了但是忘了右下角終點是白格子的情況,從而痛失50分。總之普及組拿一等獎很容易,練過一年編程的相信都沒問題(當然你是認真學),但要AK就得提高編程水平了,一般等你拿了省一(提高組一等獎)之后才能AK普及組題目(但如果你是dalao就請無視這句話)

普及組考點不多,基本考代碼能力和數學知識,而提高組才考真正有水平的算法。因此大家一般以省一為目標。那么就得掌握提高組在各方面的考點了。

結尾處有卡時等OIer隨身技巧。


 

D1T1(Day1 第1題)

       眾所周知d1t1一般都會考簡單的模擬或數學知識。下面我列一下所有可能考到的知識:

      1.模擬

    略。很多年的d1t1都是模擬,不會的話請自覺回普及組補習。

      2.數學知識

        略。noip2017的d1t1就是靠數學知識(答案是ab-a-b的那題),這種題只能靠背小學奧數知識或者推結論,如果無法推出結論就手玩(自覺理解“手玩”)。

    (您要是想看這題的題解請點這里跳轉)

 

D1T2

  d1t2的考點比較雜,一般情況下都考簡單算法,當然也有天天愛跑步這樣高難度的題。

  1.搜索(DFS?BFS?)

    noip可是哪里都有搜索的!這個位置的題當然可以選擇打搜索。但是一定要注意一個事情,那就是搜索≠暴力,不要把兩種說法弄混了!

    這里為了節省篇幅,不說方法,只弄一個樣題。

    【樣題】noip2015 信息傳遞

     傳送門:https://www.luogu.org/problemnew/show/P2661

     題解:按照題意把玩家之間的傳遞信息弄成有向邊,無權值。本題就變成了求最小環(點數最少的環)的問題。從每個環中的任意一點出發跑dfs即可。

 

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 200010
using namespace std;
inline int read(){
    int x=0;bool f=1;char c=getchar();
    for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
    for(;isdigit(c);c=getchar()) x=x*10+c-'0';
    if(!f) return 0-x;
    return x;
}
int to[maxn],fa[maxn],dfn[maxn],vis[maxn],n,huancnt,ans=2147483647;

int dfs(int cur,int cnt){
    if(dfn[cur]){
        if(vis[cur]==huancnt) return cnt-dfn[cur];//記錄該環的大小(環外的毛不算)
        else return 2147483647;//vis標記不在本輪中,說明跑到其它環去了,不更新答案 
    }
    vis[cur]=huancnt;
    dfn[cur]=cnt;
    return dfs(to[cur],cnt+1);
}
int main(){
    n=read();
    int i;
    for(i=1;i<=n;i++) to[i]=read();
    for(i=1;i<=n;i++){
        if(dfn[i]) continue;//已經訪問過 
        huancnt++,ans=min(ans,dfs(i,1));
    }
    printf("%d",ans);
    return 0;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM