当前位置: 首页 > news >正文

洛谷题单 Part2.1 模拟

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

P1003 [NOIP2011 提高组] 铺地毯

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

#include<bits/stdc++.h>
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;
}

P1067 [NOIP2009 普及组] 多项式输出

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

#include<bits/stdc++.h>
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);
        }
    }
}

P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

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

#include<bits/stdc++.h>
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);
}

P1563 [NOIP2016 提高组] 玩具谜题

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

#include<bits/stdc++.h>
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);
}

P1042 [NOIP2003 普及组] 乒乓球

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

#include<bits/stdc++.h>
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);
}

P1179 [NOIP2010 普及组] 数字统计

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

#include<bits/stdc++.h>
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;
}

P2615 [NOIP2015 提高组] 神奇的幻方

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

#include<bits/stdc++.h>
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]);
        }
    }
}

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<bits/stdc++.h>
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");
            }
            
        }
    }
}

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

P2482 [SDOI2010] 猪国杀

传送门

P5380 [THUPC2019]鸭棋

传送门

相关文章:

  • Selenium 中的 JUnit 注解
  • ES6中的set、map
  • 基python的毕业设计题目超市进存销系统
  • 云计算基础
  • C语言文件基本操作
  • 2022年全球及中国疏水阀行业头部企业市场占有率及排名调研报告
  • java6.2 springCloud
  • 第6章Linux实操篇-开机、重启和用户登录注销
  • 大学网课答案微信公众号接口使用方法
  • 第5章Linux实操篇-Vi和Vim编辑器
  • java6.1 springboot
  • Linux高性能服务器之I/O复用之实例 ET AND LT(图像理解)(14)
  • 计算机毕业设计django基于python大学生心理健康系统(源码+系统+mysql数据库+Lw文档)
  • java计算机毕业设计个性化推荐的扬州农业文化旅游管理平台源码+数据库+系统+lw文档+mybatis+运行部署
  • C#进阶03——常用泛型数据结构类
  • 2017年终总结、随想
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Elasticsearch 参考指南(升级前重新索引)
  • ES6 ...操作符
  • js学习笔记
  • linux学习笔记
  • mongodb--安装和初步使用教程
  • Redux系列x:源码分析
  • vue的全局变量和全局拦截请求器
  • 从PHP迁移至Golang - 基础篇
  • 工作中总结前端开发流程--vue项目
  • 你不可错过的前端面试题(一)
  • 容器服务kubernetes弹性伸缩高级用法
  • 微信开源mars源码分析1—上层samples分析
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​secrets --- 生成管理密码的安全随机数​
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #QT项目实战(天气预报)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $GOPATH/go.mod exists but should not goland
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (一)Neo4j下载安装以及初次使用
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)linux下的时间函数使用
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net 按比例显示图片的缩略图
  • .net6+aspose.words导出word并转pdf
  • .Net的DataSet直接与SQL2005交互
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [ANT] 项目中应用ANT
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [CTF]php is_numeric绕过
  • [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总