• 洛谷题单 Part2.1 模拟


    模拟 一个称不太算上算法的算法 通俗来讲就是他让你干啥你就干啥 做就完了
    所以这篇博客应该不太会有题解 因为没啥说的 跟着题里做就完事了
    瞅了一眼 怎么tm题目里还有猪国杀 笑死 正好之前这题是黑题的时候一直想做但是懒得做 趁这个机会给他做了哈哈哈

    P1003 [NOIP2011 提高组] 铺地毯

    传送门
    直接离线做 贼简单 对了之前一直想用快读没用上 这回终于用上了哈哈 打一遍真爽

    #include
    using namespace std;
    #define N int(1e4+10)
    inline void read(int &x){
        int s=0,w=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){s=(s<<3)+(s<<1)+(ch&15);ch=getchar();}
        x=s*w;
    }
    int n,r[N][5],a,b,c,d,x,y,now=-1;
    int main(){
        read(n);
        for(int i=1;i<=n;i++)read(r[i][1]),read(r[i][2]),read(r[i][3]),read(r[i][4]);
        read(x),read(y);
        for(int i=1;i<=n;i++){
            a=r[i][1],b=r[i][2],c=a+r[i][3],d=b+r[i][4];
            if(x>=a&&x<=c&&y>=b&&y<=d)now=i;
        }
        cout<<now<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    P1067 [NOIP2009 普及组] 多项式输出

    传送门
    这题真有意思 系数 0      1   − 1 0 \,\,\,\, 1 \, -1 011指数 0    1 0\,\,1 01都要特判 要不是能下载数据估计不能过这么快哈哈
    对了多项式系数也可以是 0 0 0,这时候输入的是常数 直接输出常数就行

    #include
    using namespace std;
    inline void read(int &x){
        int s=0,w=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){s=(s<<3)+(s<<1)+(ch&15);ch=getchar();}
        x=s*w;
    }
    int n,a;
    int main(){
        read(n);
        if(n==0){
            read(a);
            cout<<a<<endl;
            return 0;
        }
        for(int i=0;i<=n;i++){
            read(a);
            if(i==n){
                if(!a)continue;
                else if(a<0)printf("-%d\n",-a);
                else printf("+%d\n",a);
            }
            else if(i==0){
                if(!a)continue;
                else if(a==-1)printf("-x^%d",n);
                else if(a<0)printf("-%dx^%d",-a,n);
                else if(a==1)printf("x^%d",n);
                else printf("%dx^%d",a,n);
            }
            else if(i==n-1){
                
                if(a==0)continue;
                else if(a==-1)printf("-x");
                else if(a<0)printf("-%dx",-a);
                else if(a==1)printf("+x");
                else printf("+%dx",a);
            }
            else {
                if(a==0)continue;
                else if(a==-1)printf("-x^%d",n-i);
                else if(a<0)printf("-%dx^%d",-a,n-i);
                else if(a==1)printf("+x^%d",n-i);
                else printf("+%dx^%d",a,n-i);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

    传送门
    还要一遍一遍看表格 真麻烦

    #include
    using namespace std;
    #define N 220
    inline void read(int &x){
        int s=0,w=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){s=(s<<3)+(s<<1)+(ch&15);ch=getchar();}
        x=s*w;
    }
    int check(int a, int b){
        if(a==b)return 0;
        if(!a){
            if(b==1||b==4)return 2;
            else return 1;
        }
        else if(a==1){
            if(b==2||b==4)return 2;
            else return 1;
        }
        else if(a==2){
            if(b==0||b==3)return 2;
            else return 1;
        }
        else if(a==3){
            if(b==0||b==1)return 2;
            else return 1;
        }
        else if(a==4){
            if(b==0||b==1)return 1;
            else return 2;
        }
    }
    int n,ma,mb,suma,sumb,a[N],b[N];
    int main(){
        read(n),read(ma),read(mb);
        for(int i=1;i<=ma;i++)read(a[i%ma]);
        for(int i=1;i<=mb;i++)read(b[i%mb]);
        for(int i=1;i<=n;i++){
            int now=check(a[i%ma],b[i%mb]);
            if(now==2)sumb++;
            else if(now==1)suma++;
        }
        printf("%d %d\n",suma,sumb);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    P1563 [NOIP2016 提高组] 玩具谜题

    传送门
    内侧向左数和外侧向右数都是顺时针 顺时针编号递减

    #include
    using namespace std;
    #define N int(1e5+10)
    #define reg register
    struct node{
        int s;
        char nam[11];
    }toy[N];
    inline void read(int &x){
        int s=0,w=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){s=(s<<3)+(s<<1)+(ch&15);ch=getchar();}
        x=s*w;
    }
    int n,m,x,y,now=1;
    int main(){
        read(n),read(m);
        for(reg int i=1;i<=n;i++)scanf("%d%s",&toy[i].s,toy[i].nam);
        toy[0]=toy[n];
        for(reg int i=1;i<=m;i++){
            read(x),read(y);
            if(x+toy[now].s==1)(now+=y)%=n;
            else ((now+=n)-=y)%=n;
        }
        puts(toy[now].nam);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    P1042 [NOIP2003 普及组] 乒乓球

    传送门
    什么破 b b b题 正好打完最后还要输出 0 : 0    s b 0:0\,\,sb 0:0sb

    #include
    using namespace std;
    #define N 100000
    char chr;
    bool flag;
    int ow[N],ol[N],nw[N],nl[N],now,nol,nnw,nnl,pnto,pntn;
    int main(){
        while(chr!='E'){
            chr=getchar();
            while(chr!='W'&&chr!='L'&&chr!='E')chr=getchar();
            if(chr=='E')break;
            flag=1;
            if(chr=='W')now++,nnw++;
            else nol++,nnl++;
            if((now>=21||nol>=21)&&abs(now-nol)>=2)ow[++pnto]=now,ol[pnto]=nol,now=nol=0;
            if((nnw>=11||nnl>=11)&&abs(nnw-nnl)>=2)nw[++pntn]=nnw,nl[pntn]=nnl,nnw=nnl=0;
        }
        for(int i=1;i<=pntn;i++)printf("%d:%d\n",nw[i],nl[i]);
        printf("%d:%d\n",nnw,nnl);putchar(10);
        for(int i=1;i<=pnto;i++)printf("%d:%d\n",ow[i],ol[i]);
        printf("%d:%d\n",now,nol);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    P1179 [NOIP2010 普及组] 数字统计

    传送门
    ???这题为啥不放到从零开始捏

    #include
    using namespace std;
    int sum(int x){
        int ans=0;
        while(x){
            if(x%10==2)ans++;
            x/=10;
        }
        return ans;
    }
    int l,r,ans;
    int main(){
        cin>>l>>r;
        for(int i=l;i<=r;i++)ans+=sum(i);
        cout<<ans<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    P2615 [NOIP2015 提高组] 神奇的幻方

    传送门
    这题不是第一次做了哈哈 还记得第一次做的时候贼惊讶 原来幻方可以一个一个填哈哈 有时间研究研究
    这题就照着他说的做就行了

    #include
    using namespace std;
    #define N 40
    int sqr[N][N],n,l[N*N],r[N*N];
    int main(){
        cin>>n;
        sqr[1][n/2+1]=1,l[1]=1,r[1]=n/2+1;
        for(int i=2;i<=n*n;i++){
            if(l[i-1]==1&&r[i-1]!=n)l[i]=n,r[i]=r[i-1]+1,sqr[n][r[i-1]+1]=i;
            else if(r[i-1]==n&&l[i-1]!=1)r[i]=1,l[i]=l[i-1]-1,sqr[l[i-1]-1][1]=i;
            else if(l[i-1]==1,r[i-1]==n)r[i]==n,l[i]=2,sqr[2][n]=i;
            else{
                if(sqr[l[i-1]-1][r[i-1]+1])l[i]=l[i-1]+1,r[i]=r[i-1],sqr[l[i-1]+1][r[i-1]]=i;
                else l[i]=l[i-1]-1,r[i]=r[i-1]+1,sqr[l[i-1]-1][r[i-1]+1]=i;
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(j==n)printf("%d\n",sqr[i][j]);
                else printf("%d ",sqr[i][j]);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    P3952 [NOIP2017 提高组] 时间复杂度

    传送门
    这个题真的好怀念 考场现场考过 当时不知道为什么 我是我们那学的还算挺好的 然后教练没给我报 N O I P , NOIP, NOIP,我还是以锻炼的名义去参加的,当时就打了 140 140 140分,忘了这个题得多少分了 反正不超过 20 20 20 h h h hhh hhh现在想想如果考场把这个题敲出来教练会不会对我改变想法 让我接着学下去呢哈哈哈
    先看语法错误 语法错误只有两种可能性
    一是 F F F E E E不匹配 所以这里想到可以用栈来做
    二是 F F F操作时 添加的变量是之前添加过且未销毁的变量 这个比较好弄 可以随时记录一个数组 添加变量就是 1 1 1销毁变量或者没添加过这个变量就是 0 0 0
    上面说到要用栈,那么具体怎么操作呢
    首先我想到的是栈里放所有变量 用一个 c h a r char char类型的栈,但是后来我又放弃了这个想法 比如 F F    F E    F E    E E FF\,\,FE\,\,FE\,\,EE FFFEFEEE这样就没法维护循环层数了
    想了想后来又把栈里的元素换成变量和循环数
    对于每次 E E E操作,如果前面是一个变量 那就把变量弹出来 然后把这个循环的循环次数扔进栈里
    如果前面是一个数 就是一个循环次数 那么说明这个循环次数是套在马上要弹出的这个循环里的
    对于每次 F F F操作 只需计算每个循环的循环次数 并记录添加的变量即可
    细节方面,因为 a a a a s c i i ascii ascii码远大于最大循环数 1 / 2 L m a x = 50 ^1/_2L_{max}=50 1/2Lmax=50 所以用 0 − 50 0-50 050表示循环次数 用 ′ a ′ − ′ z ′ 'a'-'z' az表示变量(我刚开始用 ‘ 0 ’ − ‘ 0 ’ + 50 ‘0’-‘0’+50 ‘0’‘0’+50表示的循环次数 因为和 ′ a ′ − ′ z ′ 'a'-'z' az有重叠 死得很惨 哈哈哈哈
    做完看了眼题解 我这思路应该算是比较麻烦的 毕竟是大模拟题 只要思路清晰 代码打的不乱 就能对 每个人都有每个人的做法

    #include
    using namespace std;
    inline void read(int &x){
        int s=0,w=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){s=(s<<3)+(s<<1)+(ch&15);ch=getchar();}
        x=s*w;
    }
    char chr,now,flag,res[1000];
    int T,L,pre,pnt,x,y,pd,o[30],c[30],stk[200];
    void push(int x){stk[++pnt]=x;}
    bool empty(){return !pnt;}
    void pop(){pnt--;}
    int top(){return stk[pnt];}
    int main(){
        read(T);
        while(T--){
            memset(c,0,sizeof c);memset(o,0,sizeof o);
            read(L);chr=getchar();pnt=pd=pre=0,flag=10;
            while(chr!='(')chr=getchar();
            chr=getchar();
            if(chr!='1'){
                while(chr!='^')chr=getchar();chr=getchar();
                while(chr>='0'&&chr<='9'){pre=(pre<<3)+(pre<<1)+(chr&15);chr=getchar();}
            }
            for(register int i=1;i<=L;i++){
                x=y=0;
                if(pd){gets(res);continue;}
                chr=getchar();
                while(chr!='E'&&chr!='F')chr=getchar();
                if(chr=='E'){
                    if(empty()){pd=1;gets(res);continue;}
                    int ch=top();pop();
                    if(ch>=0&&ch<=50){
                        now=ch;
                        while(!empty()&&top()>=0&&top()<=50){
                            now=top()>now?top():now;
                            pop();
                        }
                        if(empty()){pd=1;gets(res);continue;}
                        c[top()-'a']=0;
                        if(flag>='a'&&flag<='z'){
                            if(flag==top())flag=10;
                            pop();push(0);continue;
                        }
                        if(o[top()-'a']<0){pop();push(0);}
                        else if(o[top()-'a']){pop();push(now+1);}
                        else {pop();push(now);}
                    }
                    else{
                        c[ch-'a']=0;
                        if(flag>='a'&&flag<='z'){
                            if(flag==ch)flag=10;
                            push(0);continue;
                        }
                        int nw=o[ch-'a'];
                        if(nw<0)nw=0;
                        now=nw;
                        while(!empty()&&top()>=0&&top()<=50){
                            now=top()>now?top():now;
                            pop();
                        }
                        push(now);
                    }
                }
                else{
                    char nam;
                    while(chr<'a'||chr>'z')chr=getchar();nam=chr;
                    if(c[nam-'a']){gets(res);pd=1;continue;}
                    int yy=0;
                    c[nam-'a']=1;push(chr);
                    while(chr!='n'&&(chr<'0'||chr>'9'))chr=getchar();
                    if(chr=='n')yy=1,chr=getchar();
                    while(chr>='0'&&chr<='9'){x=(x<<3)+(x<<1)+(chr&15);chr=getchar();}
                    while(chr!='n'&&(chr<'0'||chr>'9'))chr=getchar();
                    if(chr=='n'){
                        if(!yy)o[nam-'a']=1;
                        else o[nam-'a']=0;
                        continue;
                    }
                    while(chr>='0'&&chr<='9'){y=(y<<3)+(y<<1)+(chr&15);chr=getchar();}
                    o[nam-'a']=0;
                    if(yy||y<x){
                        if(flag<'a'||flag>'z')flag=nam;
                        o[nam-'a']=-1;
                    }
                }
            }
            if(pd||empty())puts("ERR");
            else{
                int ck=top();pop();
                if(ck>='a'&&ck<='z')puts("ERR");
                else{
                    now=ck;
                    while(!empty()&&top()>=0&&top()<=50){
                        now=top()>now?top():now;
                        pop();
                    }
                    if(!empty())puts("ERR");
                    else if(now==pre)puts("Yes");
                    else puts("No");
                }
                
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107

    还剩两道大模拟 有时间做就来更 实在是太费时间了

    P2482 [SDOI2010] 猪国杀

    传送门

    P5380 [THUPC2019]鸭棋

    传送门

  • 相关阅读:
    一起Talk Android吧(第四百二十一回:绘图中添加阴影)
    企业如何结合 SaaS 与 RADIUS 保障 WiFi 安全?
    解决echarts配置滚动(dataZoom)后导出图片数据不全问题
    《信息安全技术》学习笔记03
    Redis缓存何以一枝独秀?以及热门面试题中Redis的核心特性
    K8s基础架构【1】
    PTA甲级-1003 Emergency c++
    新一代网状网协议T-Mesh无线通信技术优势介绍
    程序分析与优化 - 11 多分支分析
    基于SpringBoot+Redis实现接口限流
  • 原文地址:https://blog.csdn.net/dhdhdhx/article/details/126433586