2021女生赛——5道基础题整理

这篇具有很好参考价值的文章主要介绍了2021女生赛——5道基础题整理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

音乐游戏

2021女生赛——5道基础题整理

【遇到的问题】
一眼看去非常简单,但就是过不去。
无论是scanf(),string,getchar(),还是不同位置的缓存清楚,都一直WA,
但又觉得哪都没错(这么简单能错在哪?)

最后抱着试一试的心态,把 ios::sync_with_stdio(false); cin.tie(0); 这两行注释掉了;
然后……
就AC了……(T_T) 一个多小时啊 (╯▔皿▔)╯

传送门:C++中ios::sync_with_stdio(false); 与 getchar() 不能同时使用的原因

AC代码

#include <bits/stdc++.h>
using namespace std;
int main(){
//    ios::sync_with_stdio(false);
//    cin.tie(0);

    int n;  cin>>n;
    int cnt=0;
    char c;
    getchar();
    for(int i=1;i<=n;i++){
        for(int j=1;j<=6;j++){
            c=getchar();
            if(c=='-') cnt++;
        }
        getchar();
    }
    cout<<cnt<<endl;

    return 0;
}

公交线路

2021女生赛——5道基础题整理
【遇到的问题】
1、题目没读好,没去想 ≤|x-y| 的含义;导致有了多余的想法(比如:做到总站,又返回(这又涉及到两种情况));
2、没带纸笔,从公司到家的方向总是不明朗;
3、知道可以通过字符串匹配,但是一开始的处理是把主串翻转(默认回家方向向右,若向左,则反转);后来反应过来有更清晰明朗的写法┭┮﹏┭┮

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N=100;

bool Judge(string sub,string temp,string cmp){
    return (temp.find(sub)!=-1 && cmp.find(sub)!=-1);
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n,m,x,y;
    int k[N],p[N];
    string temp="";	   //正确主串
    string sub="";	   //子串
    string cmp="";	   //错误主串

	//子串分别匹配两个主串,当且仅当(正确主串匹配正确,且错误主串匹配错误),方向才正确

    cin>>n>>x>>y;
    for(int i=1;i<=n;i++) cin>>k[i];
    if(x<y){    //右方向
        for(int i=x+1;i<=y;i++) temp+=k[i]+'0';
        for(int i=x-1;i>=0;i--) cmp+=k[i]+'0';
    }else{    //左方向
        for(int i=x-1;i>=y;i--) temp+=k[i]+'0';
        for(int i=x+1;i<=n;i++) cmp+=k[i]+'0';
    }
    cin>>m;
    for(int i=1;i<=m;i++){
        cin>>p[i];
        sub+=p[i]+'0';
    }

    if(Judge(sub,temp,cmp)){
        cout<<"Unsure"<<endl;
    }else{
        if(temp.find(sub)!=-1) cout<<"Right"<<endl;
        else cout<<"Wrong"<<endl;
    }

    return 0;
}

修建道路

2021女生赛——5道基础题整理
【遇到的问题】
没仔细看 max(a[k]), (k∈[i,j])
首先想到的是:1-n中的最大值 + 2-n中的最大值 + … +
当然这个一开始就被PASS了;

最大的问题是,题目对数组 a[ ] 没有解释(我认为);
现在感觉应该指的是,如果两两相邻村庄之间修建道路,那么就需要的花费;(可是 a [ ] 的数据个数是n,不是n-1 (・∀・(・∀・(・∀・*)……)
所以,不要纠结啦,直接当作求每个点连通后满足条件的最小权值和吧(●ˇ∀ˇ●)
啊哈哈哈哈(ˉ▽ˉ;)…

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N=200010;
typedef long long ll;
ll a[N];

/*
主要:最开始没看懂题意,也没好好揣摩max的含义

自己做的话应该会陷入到动态规划里,
因为这句话“ max(i≤k≤j){ak} ”;

图形想得正确,啊,其实自己也能做出来
*/

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n;  cin>>n;
    ll ans=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=2;i<=n;i++){
        ans+=max(a[i],a[i-1]);
    }
    cout<<ans<<endl;

    return 0;
}

3G网络

2021女生赛——5道基础题整理
【解决】
一开始是数学推导,但,哦豁 (○´・д・)ノ 又是平方又是和又是交集的,这怎么证明(〃>目<)
其实自己陷入了严谨推导的误区里;
这里完全可以采用无限逼近的思想(题目还给你提示了……)

耍一个小聪明 (●’◡’●) 观察可以发现,答案就是 n 的倒数~ o( ̄▽ ̄)o

AC代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n; cin>>n;
    int x,y;
    for(int i=0;i<n;i++) cin>>x>>y;
    printf("%.10lf\n",(double)1/n);

    return 0;
}

驾驶卡丁车

2021女生赛——5道基础题整理
【解决】
1、与 BFS 思想一样,但实现简单 ┭┮﹏┭┮
2、方向的处理:一是可以利用 1-8;二是利用 +7)%8 或 +1)%8;

AC代码

#include<bits/stdc++.h>
using namespace std;
const int N=55;
int n,m,q,x,y;
string s;
int mp[N][N];
struct node{
    int x,y;
};
struct node path[8]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};

// (+7)%8  向左偏
// (+1)%8  向右偏

int check(int dir){
    if(dir==1 || dir==3 || dir==5 || dir==7){
        if(mp[x+path[(dir+7)%8].x][y+path[(dir+7)%8].y]==1 &&
           mp[x+path[(dir+1)%8].x][y+path[(dir+1)%8].y]==1)
        return 1;
    }
    return 0;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>s;
        for(int j=0;j<m;j++){
            if(s[j]=='.') mp[i][j+1]=0;
            else if(s[j]=='#') mp[i][j+1]=1;
            else{
                mp[i][j+1]=0;
                x=i,y=j+1;
            }
        }
    }
    cin>>q; cin>>s;
    int v=0,dir=0;
    for(int step=0;step<q;step++){
        bool is_ok=true;
        if(s[step]=='L') dir=(dir+7)%8;
        else if(s[step]=='R') dir=(dir+1)%8;
        else if(s[step]=='U') v++;
        else if(s[step]=='D') v=max(v-1,0);

        int xx,yy;
        for(int i=1;i<=v;i++){
            yy=y+path[dir].y;
            xx=x+path[dir].x;
            if(mp[xx][yy] || xx<=0 || yy<=0 || xx>n || yy>m || check(dir)){
                cout<<"Crash! "<<x<<" "<<y<<endl;
                v=0;
                is_ok=false;
                break;
            }
            x=xx,y=yy;
        }
        if(is_ok) cout<<x<<" "<<y<<endl;
    }
    return 0;
}

WA代码(但是找不出bug)

我反正是不想找了(De了一天了 凸(艹皿艹 ) ),要是大家愿意帮我也是不错的嗷 U•ェ•*U

#include <bits/stdc++.h>
using namespace std;
const int N=60;
char map_[N][N];
int n,m,q;
int x,y,v;
int drt=1;


// 1   2   3   4   5   6   7   8
//上 右上 右 右下 下 左下 左 左上


void DirctionJudge(char fx){
    if(fx=='L'){
        drt==1 ? drt=8:--drt;
    }else{
        drt==8 ? drt=1:++drt;
    }
}

void Move(){
    if(drt==1) x-=v;
    else if(drt==2) x-=v,y+=v;
    else if(drt==3) y+=v;
    else if(drt==4) x+=v,y+=v;
    else if(drt==5) x+=v;
    else if(drt==6) x+=v,y-=v;
    else if(drt==7) y-=v;
    else if(drt==8) x-=v,y-=v;
}

bool IsCrash(int tx,int ty){
    if(drt==1){
        if(v)
        for(int i=tx;i>=x;i--){
            if(map_[i][ty]=='#'){
                x=i+1,y=ty;
                v=0;
                return true;
            }
            if(i<1){
                x=1;
                v=0;
                return true;
            }
        }
        return false;
    }else if(drt==2){
        if(v)
        for(int i=tx,j=ty;i>x && j<y;i--,j++){
            if((map_[i-1][j]=='#' && map_[i][j+1]=='#')||map_[i-1][j+1]=='#'){
                x=i,y=j;
                v=0;
                return true;
            }
            if(i<1 && j>m){
                x=1,j=m;
                v=0;
                return true;
            }else if(i<1){
                x=1,y=j;
                v=0;
                return true;
            }else if(j>m){
                x=i,y=m;
                v=0;
                return true;
            }
        }
        return false;
    }else if(drt==3){
        if(v)
        for(int i=ty;i<=y;i++){
            if(map_[tx][i]=='#'){
                x=tx,y=i-1;
                v=0;
                return true;
            }
            if(i>m){
                y=m;
                v=0;
                return true;
            }
        }
        return false;
    }else if(drt==4){
        if(v)
        for(int i=tx,j=ty;i<x && j<y;i++,j++){
            if((map_[i+1][j]=='#' && map_[i][j+1]=='#')||map_[i+1][j+1]=='#'){
                x=i,y=j;
                v=0;
                return true;
            }
            if(i>n && j>m){
                x=n,y=m;
                v=0;
                return true;
            }else if(i>n){
                x=n,y=j;
                v=0;
                return true;
            }else if(j>m){
                x=i,y=m;
                v=0;
                return true;
            }
        }
        return false;
    }else if(drt==5){
        if(v)
        for(int i=tx;i<=x;i++){
            if(map_[i][ty]=='#'){
                x=i-1,y=ty;
                v=0;
                return true;
            }
            if(i>n){
                x=n;
                v=0;
                return true;
            }
        }
        return false;
    }else if(drt==6){
        if(v)
        for(int i=tx,j=ty;i<x && j>y;i++,j--){
            if((map_[i+1][j]=='#' && map_[i][j-1]=='#')||map_[i+1][j-1]=='#'){
                x=i,y=j;
                v=0;
                return true;
            }
            if(i>n && j<1){
                x=n,y=1;
                v=0;
                return true;
            }else if(i>n){
                x=n,y=j;
                v=0;
                return true;
            }else if(j<1){
                x=i,y=1;
                v=0;
                return true;
            }
        }
        return false;
    }else if(drt==7){
        if(v)
        for(int i=ty;i>=y;i--){
            if(map_[tx][i]=='#'){
                x=tx,y=i+1;
                v=0;
                return true;
            }
            if(i<1){
                y=1;
                v=0;
                return true;
            }
        }
        return false;
    }else if(drt==8){
        if(v)
        for(int i=tx,j=ty;i>x && j>y;i--,j--){
            if((map_[i][j-1]=='#' && map_[i-1][j]=='#')||map_[i-1][j-1]=='#'){
                x=i,y=j;
                v=0;
                return true;
            }
            if(i<1 && j<1){
                x=1,y=1;
                v=0;
                return true;
            }else if(i<1){
                x=1,y=j;
                v=0;
                return true;
            }else if(j<1){
                x=i,y=1;
                v=0;
                return true;
            }
        }
        return false;
    }
    return false;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            cin>>map_[i][j];
            if(map_[i][j]=='*'){
                x=i, y=j;
                map_[i][j]='.';
            }
        }
    cin>>q;
    string op;  cin>>op;

    int idx=0;
    while(q--){
        int tx=x,ty=y;
        if(op[idx]=='L'){
            DirctionJudge('L');
        }else if(op[idx]=='R'){
            DirctionJudge('R');
        }else if(op[idx]=='U'){
            v++;
        }else{
            v=max(v-1,0);
        }
        Move();
        idx++;
//        cout<<"起始点:("<<tx<<","<<ty<<")"<<endl;
//        cout<<"方向="<<drt<<endl;
//        cout<<"移动"<<v<<"格"<<endl;
//        cout<<"现在点:("<<x<<","<<y<<")"<<endl;
        if(IsCrash(tx,ty)){
            cout<<"Crash! "<<x<<" "<<y<<endl;
        }else{
            cout<<x<<" "<<y<<endl;
        }
    }

    return 0;
}

想记录的 (●ˇ∀ˇ●)

(1)审题一定要仔细!一定要纸笔 ┭┮﹏┭┮
(2)C++输入输出流;
(3)BFS;方向表示;
(4)小聪明之找规律;文章来源地址https://www.toymoban.com/news/detail-430628.html

到了这里,关于2021女生赛——5道基础题整理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ISO SAE 21434-2021 工作产品(WP)整理

    本文旨在将21434中各阶段涉及的WP统一梳理出来,方便学习及查阅。 “WP” for a work product 序号 编号 标准原文 中文翻译 1 WP-05-01 Cybersecurity policy, rules and processes, resulting from the requirements of 5.4.1 to 5.4.3 网络安全政策、规则和流程,来自5.4.1至5.4.3的结果 2 WP-05-02 Evidence of competen

    2023年04月18日
    浏览(39)
  • 全国研究生数学建模竞赛资料【2004-2021】【详细整理】

    2021年第十八届全国研究生数学建模竞赛 【A题】相关矩阵组的低复杂度计算和存储建模 [题目] [附件] [优秀论文 0,1,2,3,4,5,6] 【B题】空气质量预报二次建模 [题目] [附件] [优秀论文 0,1,2,3,4,5,6,7,8] 【C题】帕金森病的脑深部电刺激治疗建模研究 [题目] [附件] [优秀论文 0,1,2,3,4,5,

    2024年02月06日
    浏览(55)
  • Html5版音乐游戏制作及分享(H5音乐游戏)

    这里实现了Html5版的音乐游戏的核心玩法。 游戏的制作借鉴了,很多经典的音乐游戏玩法,通过简单的代码将音乐的节奏与操作相结合。 可以通过手机进行游戏,准确点击下落时的目标,进行得分。 点击试玩 游戏内的下落数据是通过手打记录的,可能有些偏差哈。 1、Html中

    2023年04月17日
    浏览(46)
  • android Alarm闹钟发送广播播放音乐,吐血整理

    ========================================== 一共有3个类 MainActivity.java 主程序 AlarmReceiver.java 广播接收器 MusicService.java service播放音乐 MainActivity.java package com.yqy.yqy_alarm; import java.util.Calendar; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.TimePickerDi

    2024年04月23日
    浏览(49)
  • 游戏开发之Unity2021智能导航地图烘焙

    单独调整移动某一颗树或者其它东西的时候可以按住 Ctrl+shift ,可以帮助我们自动吸附到某一个表面上  调出智能导航的面板,选择窗口,选择AI,选择导航 将地面设置为静态的,否则就不能进行烘焙,在导航中选择对象,选择可移动的 在导航中选择烘焙,选择bake  bake完之

    2024年02月10日
    浏览(50)
  • Html5钢琴块游戏制作(音乐游戏)

    当年一款手机节奏音游,相信不少人都玩过或见过。最近也是将其做了出来分享给大家。 游戏的基本玩法:点击下落的黑色方块,弹奏音乐。(下落的速度会越来越快)  可以进行试玩,手机玩起来效果会更好些。 点击试玩 游戏使用了一首儿歌乐谱,听出来是啥了吗^ ^ --

    2023年04月16日
    浏览(42)
  • 造物者:专注游戏音乐创造——奏响游戏世界乐章

    游戏的世界宛如一幅壮丽的画卷,由华丽的图像和引人入胜的故事构成,然而,其完美之作还有一部分不可或缺的元素,那就是音乐。在这个数字时代,北京造物者科技有限公司(以下简称造物者)正崭露头角,以其专业游戏音乐制作服务,将游戏音乐提升至前所未有的高度

    2024年02月06日
    浏览(38)
  • 音乐游戏《Tiles Hop》核心功能

    音乐游戏《Tiles Hop》,随着音乐节奏进行跳跃 球在一定的速度下,特定的时候踩到砖块,同时正好和音乐的节奏要配合上; LRC歌词编辑器: 这段代码的作用是在游戏启动时初始化框架模块和游戏模块,然后检查资源更新,并在游戏开始时调用 Game 类的 GameStart() 方法。其中,这

    2024年02月03日
    浏览(38)
  • 关于游戏引擎(godot)对齐音乐bpm的技术

    引擎默认底层 1. _process(): 每秒钟调用60次(无限的) 数学 1. bpm=1分钟节拍数量=60s节拍数量 bpm120 = 60s120拍 2. 每拍子时间= 60/bpm 3. 每个拍子触发周期所需要的帧数= 每拍子时间*60(帧率) 这个是从帧数级别上对齐拍子的时间,对于游戏引擎来说,用帧数更加适合高频触发程序 在

    2024年02月16日
    浏览(51)
  • 【C++】做一个飞机空战小游戏(四)——给游戏添加背景音乐(多线程技巧应用)

      [导读]本系列博文内容链接如下: 【C++】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 【C++】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C++】做一个飞

    2024年02月14日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包