• NOIP2019普及级别模拟 3.30校模拟


     好吧我还是第一次写这种总结类的玩意…

    考场心情…hmm…我没睡醒。是的是这样的,反正题都有两三个看错了或者没看懂…

    最关键的是!!我!居!然!把!Freopen!写!在!了!程!序!最!后!

    然后就和谐愉快欢乐的爆0了。

    好的那么来记录一下这次0分考试叭…

    A. 【NOIP2018普及级别模拟】数池塘

     

    第一眼望去…好的老师你放水了…这个很显然…

    一定是在学搜索的时候玩的模板级水题…

    脑海里盘旋起了明老师的重庆话…“到边边儿~跳出来~每张牌牌挨到来!手中牌,插进来,千万莫忘要收牌~”

    好的。深搜认定。

    #include<iostream>
    using namespace std;
    bool a[1001][1001];
    int total=0;
    int n,m;
    void search(int x,int y){
        if(x>n||y>m||x<1||y<1){
            return;
        }
        if(a[x][y]==false){
            return;
        }
        if(a[x][y]){
            a[x][y]=false;
            search(x+1,y);
            search(x-1,y);
            search(x,y-1);
            search(x,y+1);
            search(x+1,y+1);
            search(x-1,y-1);
            search(x+1,y-1);
            search(x-1,y+1);
         //a[x][y]=true; } }
    int main(){ cin>>n>>m; char index='a'; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>index; if(index=='W'){ a[i][j]=true; } } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(a[i][j]){ total++; search(i,j); } } } cout<<total; }

    无非就是像染色一样,找到一个W就把他周围所有的W全染成“.”,记得count就好了。

    但是发觉我一“收牌”丫就RE了,于是就注释了a[x][y]=true;

    然后就愉快的拿到了保底分AC…

    B. 【NOIP2018普及级别模拟】接苹果

     

    我还真不知道奶牛爱吃苹果。

    好吧,第一反应——老师老师我知道!这题是标准的动态规划!!

    第二反应——啊,DF是怎么玩的来着…忘…掉…了…

    于是就直接0了。

    之后去翻洛谷的题解,恍然大悟。

    哇!原来不止我一个人喜欢盲起搜索!

    //来源洛谷题解  已经完全理解,并可以重构。 
    #include <cstdio>      
    #include <iostream>
    #include <cstring>
    using namespace std;
    int n, w, a[1005], f[1005][3][35];          
    int dfs(int i,int j,int k)                      
    {
        if (i > n)return 0;                      
        if (f[i][j][k] != -1)return f[i][j][k];   
        int tmp1 = 0, tmp2 = 0;            
        if (k < w && a[i] != j)                
            tmp1 = dfs(i + 1, -1 * j + 3, k + 1) + 1;   
        tmp2 = dfs(i + 1, j, k) + (j == a[i] ? 1 : 0);     
        return f[i][j][k] = max(tmp1, tmp2);       
    }
    int main()
    {
        //freopen("  .in","r",stdin);          //朕就是今天在这里傻不兮兮的把freopen写到了程序末尾才爆了0…… 
        //freopen("  .out","w",stdout);
        cin >> n >> w;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        memset(f, -1, sizeof(f));         
        cout << dfs(1, 1, 0);              
    }

    看完题解才觉得“其实我可以的!”

    好吧,在某一时间中,我们只有两种选择:

    1.跑到另一棵树

    2.待在原地不要动

    于是就有了tmp1与tmp2这种神奇的小别致。如果这个时刻我们不动都可以拿到一个苹果,那我肯定不走呀!!然后我们比较一下两种可能谁更大就好了。i表示时刻点,j表示所在树,k表示移动的次数。

    C. 【NOIP2018普及级别模拟】.找数

    这题我不想说什么,为我的神志不清开心的拍起肚皮

    分明是刚学都能会的…我硬生生看成了求第K小的数…

    还细心地帮他去了个重…(然而并不用)

    不如先欣赏一下这个智障操作好了…

    #include<iostream> 
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    const int MAXN=3005000;
    int xu[MAXN];
    bool qc[MAXN];
    int k,n;
    int main(){
        int x;
        scanf("%d%d",&n,&k);
        k++;
        for(int i=1;i<=n;i++){
            scanf("%d",&x);
            if(qc[x]==false){
                xu[++xu[0]]=x;
                qc[x]=true;
            }
        }
        sort(xu+1,xu+1+xu[0]);
        printf("%d",xu[k]);
        //freopen("find.in","r",stdin);
    //    freopen("find.out","w",stdout);
    } 

    啊,仿佛还能嗅得到当时脑子里的海鲜味。

    #include<bits/stdc++.h>
    //代码源自WKJ,已经理解并可以重构 
    using namespace std;
    int n,k;
    int a[3000000];
    bool cmpy(int x,int y){
        return x>y;
    }
    int main(){
    //    freopen("find.in","r",stdin);
    //    freopen("find.out","w",stdout);
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        sort(a+1,a+n+1,cmpy);//所以说是第几大…我还以为是算第几小… 
        printf("%d",a[k]);
        return 0;
    }

    D. 【NOIP2018普及级别模拟】最短路线

    这题我依然没有AC…因为据说涉及到高精度压位,懵逼着呢。等会钻研一下。

     不过经过指点过后,明白这东西是用DP的,然而并没加高精度。先上下代码

    #include<bits/stdc++.h>
    using namespace std;
    long long m,n,dp[1001][1001];
    int main(){
    //    freopen("sline.in","r",stdin);
    //    freopen("sline.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)dp[i][1]=1;
        for(int j=1;j<=n;j++)dp[m][j]=1;
        for(int i=m-1;i>=1;i--)
        for(int j=2;j<=n;j++)if(i!=m&&j!=1)dp[i][j]=dp[i+1][j]+dp[i][j-1];
        cout<<dp[1][n];
        return 0;
    }

    并不可以AC…

    E. 【NOIP2018普及级别模拟】生成树

    第一眼依然没看懂题,我的想法“难道要模拟?那这数据量稳稳爆炸啊,思路有问题可能”

    然后就0了…好吧,或许骗个分也不错的应该。

    后期讲解这是有规律可循的,加个快速幂就可以AC。

    #include<bits/stdc++.h>
    using namespace std;
    long long n,k,ans=1;
    //发现规律,然后使用快速幂 
    long long qsort(long long x,long long y){
        while(y){
            if(y&1)ans=ans*x%k;
            x=x*x%k;
            y>>=1;
        }
        return ans;
    }
    int main(){
        cin>>n>>k;
        if(n==1){cout<<1;return 0;}
        if(k==0){cout<<-1;return 0;}
        if(n==0){cout<<0;return 0;}
        cout<<qsort(n%k,n-2);
        return 0;
    }
  • 相关阅读:
    到具体某一天的倒计时
    angular2 2种方式----获取子组件的类属性和类方法
    页面刷新
    angular父子组件传值
    div垂直居中,文字垂直居中!!!
    Python 基础数据类型 II (列表)
    Python 基础数据类型 I (str等)
    学习笔记411
    20190407 Word合并单元格
    VBA正则笔记 理解肯定环视
  • 原文地址:https://www.cnblogs.com/Uninstalllingyi/p/10631860.html
Copyright © 2020-2023  润新知