首页 > 其他分享 >初见蓝桥杯

初见蓝桥杯

时间:2023-05-30 20:15:11浏览次数:40  
标签:输出 10 int 蓝桥 复制 初见 输入 回文

由于我怕我太菜所以大一没报蓝桥杯比赛(我这个人很自卑呜呜呜)

P8637 [蓝桥杯 2016 省 B] 交换瓶子

题目描述

有 N 个瓶子,编号 1∼N,放在架子上。

比如有 55 个瓶子:

2,1,3,5,4

要求每次拿起 22 个瓶子,交换它们的位置。

经过若干次后,使得瓶子的序号为:

1,2,3,4,5

对于这么简单的情况,显然,至少需要交换 22 次就可以复位。

如果瓶子更多呢?你可以通过编程来解决。

输入格式

第一行:一个正整数 N(1<N<10000),表示瓶子的数目。

第二行:N 个正整数,用空格分开,表示瓶子目前的排列情况。

输出格式

输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。

输入输出样例

输入 #1
5
3 1 2 5 4
输出 #1
3
输入 #2
5
5 4 3 2 1
输出 #2
2
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,p[1000010],x[1000010],y[1000010];
 4 int find(int x)
 5 {
 6     if(x!=p[x]) p[x]=find(p[x]);
 7     return p[x];
 8 }
 9 int main()
10 {
11     cin>>n>>m;
12     for(int i=1;i<=n;i++) p[i]=i;
13     while(m--)
14     {
15         int a,b,c;
16         cin>>c>>a>>b;
17         if(c==1)
18             p[find(a)]=find(b);
19         else
20         {
21             if(find(a)==find(b)) cout<<'Y'<<endl;
22             else cout<<'N'<<endl;
23         }
24     }
25     return 0;
26 }

题目描述

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 yyyymmdd 的格式写成一个 88 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。

有人表示 20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。

也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年12 月12 日。算不上“千年一遇”,顶多算“千年两遇”。

给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。

输入格式

输入包含一个八位整数 N,表示日期。

输出格式

输出两行,每行 11 个八位数。第一行表示下一个回文日期,第二行表示下 一个 ABABBABA 型的回文日期。

输入输出样例

输入 #1
20200202
输出 #1
20211202
21211212
#include<bits/stdc++.h>
using namespace std;
bool f1,f2;
int res;
int p[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
bool check(int a,int b,int c,int d)
{
    //dcba
    if(d*10+c<=12&&d*10+c>0)
    {
        if(p[d*10+c]>=b*10+a&&b*10+a>0) return true;
        else return false;
    }
    else return false;
}
bool checkab(int a,int b,int c,int d)
{
    if(d*10+c<=12&&d*10+c>0)
    {
        int x=d*10+c;
        if(p[x]>=b*10+a&&((a*10+b)==(c*10+d))&&b*10+a>0) return true;
        else return false;
    }
    else return false;
}
int main()
{
    string s;
    cin>>s;
    for(int a=1;a<=9;a++)
    {
        if(f1&&f2) break;
        for(int b=0;b<=9;b++)
        {
            if(f1&&f2) break;
            for(int c=0;c<=9;c++)
            {
                if(f1&&f2) break;
                for(int d=0;d<=9;d++)
                {
                    if(f1&&f2) break;
                    for(int e=0;e<=9;e++)
                    {
                        if(f1&&f2) break;
                        for(int f=0;f<=9;f++)
                        {
                            if(f1&&f2) break;
                            for(int g=0;g<=9;g++)
                            {
                                if(f1&&f2) break;
                                for(int h=0;h<=9;h++)
                                {
                                    if(a==s[0]-'0'&&b==s[1]-'0'&&c==s[2]-'0'&&d==s[3]-'0'&&e==s[4]-'0'&&f==s[5]-'0'&&g==s[6]-'0'&&h==s[7]-'0')
                                        res++;
                                    if(res==1&&check(a,b,c,d)&&!f1)
                                    {
                                        cout<<a<<b<<c<<d<<d<<c<<b<<a<<endl;
                                        f1=true;
                                    }
                                    if(res==1&&checkab(a,b,c,d)&&!f2)
                                    {
                                        cout<<a<<b<<c<<d<<b<<a<<d<<c<<endl;
                                        f2=true;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}

P8623 [蓝桥杯 2015 省 B] 移动距离

X 星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 1,2,3,⋯1,2,3,⋯ 。

当排满一行时,从下一行相邻的楼往反方向排号。

比如:当小区排号宽度为 66 时,开始情形如下:

1  2  3  4  5  6
12 11 10 9  8  7

13 14 15 ....

我们的问题是:已知了两个楼号 �m 和 �n,需要求出它们之间的最短移动距离。(不能斜线方向移动)

输入格式

输入为 33 个整数 �,�,�w,m,n,空格分开,都在 11 到 1000010000 范围内。

�w 为排号宽度,�,�m,n 为待计算的楼号。

输出格式

要求输出一个整数,表示 �m 与 �n 两楼间最短移动距离。

输入输出样例

输入 #1
6 8 2
输出 #1
4
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int w,m,n,res=1,ans=1,x,xx,y,yy;
 4 int mp[2020][2020];
 5 bool f1,f2;
 6 int main()
 7 {
 8     cin>>w>>m>>n;
 9     int p=10000/w+1;
10     for(int i=1;i<=p;i++)
11     {
12         if(f1&&f2) break;
13         if(ans%2!=0||ans==1)
14         {
15             for(int j=1;j<=w;j++)
16             {
17                 mp[i][j]=res++;
18                 if(mp[i][j]==m) x=i,y=j,f1=true;
19                 else if(mp[i][j]==n) xx=i,yy=j,f2=true;
20             }
21             ans++;
22         }
23         else if(ans%2==0)
24         {
25             for(int j=w;j>=1;j--)
26             {
27                 mp[i][j]=res++;
28                 if(mp[i][j]==m) x=i,y=j,f1=true;
29                 else if(mp[i][j]==n) xx=i,yy=j,f2=true;
30             }
31             ans++;
32         }
33     }
34     // for(int i=1;i<=7;i++)
35     // {
36     //     for(int j=1;j<=7;j++)
37     //     cout<<mp[i][j]<<" ";
38     //     cout<<endl;
39     // }
40     cout<<abs(x-xx)+abs(y-yy)<<endl;
41     return 0;
42 }

P8597 [蓝桥杯 2013 省 B] 翻硬币

题目背景

小明正在玩一个“翻硬币”的游戏。

题目描述

桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo,如果同时翻转左边的两个硬币,则变为 oooo***oooo。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

输入格式

两行等长字符串,分别表示初始状态和要达到的目标状态,每行长度小于 10001000。

数据保证一定存在至少一种方案可以从初始状态和要达到的目标状态。

输出格式

一个整数,表示最小操作步数。

输入输出样例

输入 #1
**********
o****o****
输出 #1
5
输入 #2
*o**o***o***
*o***o**o***
输出 #2
1
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 string s1,s2;
 4 int res;
 5 void filp(int x)
 6 {
 7     if(s1[x]=='*') s1[x]='o';
 8     else s1[x]='*';
 9     if(s1[x+1]=='*') s1[x+1]='o';
10     else s1[x+1]='*';
11 }
12 bool check()
13 {
14     for(int i=0;i<=s1.size();i++)
15     {
16         if(s1[i]!=s2[i]) return false;
17     }
18     return true;
19 }
20 int main()
21 {
22     cin>>s1>>s2;
23     for(int i=0;i<s1.size()-1;i++)
24     {
25         if(check()) break;
26         if(s1[i]!=s2[i])
27         {
28             filp(i);
29             res++;
30         }
31     }
32     cout<<res;
33     return 0;
34 }

P9240 [蓝桥杯 2023 省 B] 冶炼金属

题目描述

小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。这个炉子有一个称作转换率的属性 �V,�V 是一个正整数,这意味着消耗 �V 个普通金属 O 恰好可以冶炼出一个特殊金属 X,当普通金属 O 的数目不足 �V 时,无法继续冶炼。

现在给出了 �N 条冶炼记录,每条记录中包含两个整数 �A 和 �B,这表示本次投入了 �A 个普通金属 O,最终冶炼出了 �B 个特殊金属 X。每条记录都是独立的,这意味着上一次没消耗完的普通金属 O 不会累加到下一次的冶炼当中。

根据这 �N 条冶炼记录,请你推测出转换率 �V 的最小值和最大值分别可能是多少,题目保证评测数据不存在无解的情况。

输入格式

第一行一个整数 �N,表示冶炼记录的数目。

接下来输入 �N 行,每行两个整数 �,�A,B,含义如题目所述。

输出格式

输出两个整数,分别表示 �V 可能的最小值和最大值,中间用空格分开。

输入输出样例

输入 #1
3
75 3
53 2
59 2
输出 #1
20 25

说明/提示

【样例说明】

当 �=20V=20 时,有:⌊7520⌋=3,⌊5320⌋=2,⌊5920⌋=2⌊2075​⌋=3,⌊2053​⌋=2,⌊2059​⌋=2,可以看到符合所有冶炼记录。

当 �=25V=25 时,有:⌊7525⌋=3,⌊5325⌋=2,⌊5925⌋=2⌊2575​⌋=3,⌊2553​⌋=2,⌊2559​⌋=2,可以看到符合所有冶炼记录。

且再也找不到比 2020 更小或者比 2525 更大的符合条件的 �V 值了。

#include<bits/stdc++.h>
using namespace std;
int resmin=-2e9,resmax=2e9;
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int a,b;
        cin>>a>>b;
        resmax=min(resmax,a/b);
        resmin=max(resmin,a/(b+1)+1);        
    }
    cout<<resmin<<" "<<resmax;
    return 0;
}

 

标签:输出,10,int,蓝桥,复制,初见,输入,回文
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/17444259.html

相关文章

  • 蓝桥杯 基础练习 特殊回文数(C++)
    资源限制内存限制:512.0MBC/C++时间限制:1.0sJava时间限制:3.0sPython时间限制:5.0s问题描述123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。输入格式输入一行,包含一个正整......
  • 第十四届蓝桥杯大赛青少组全国总决赛初级组C++C++题解
    第十四届蓝桥杯大赛青少组全国总决赛初级组\(C++\)题解第一题给定一个十进制正整数\(N(1≤N≤10^9)\),请从小到大输出\(1\)~\(N\)之间(含\(1\)和\(N\))所有满足以下要求的数:这个数转换为八进制后是一个回文数;这个数是一个平方数。例如:\(N=20\),在\(1\)~\(20\)之间满足要求......
  • 【蓝桥杯集训·每日一题】AcWing 4496. 吃水果
    写在前面本人CSDN博客主页:这里一、题目1、原题链接4496.吃水果2、题目描述n个小朋友站成一排,等着吃水果。一共有m种水果,每种水果的数量都足够多。现在,要给每个小朋友都发一个水果,要求:在所有小朋友都拿到水果后,恰好有k个小朋友拿到的水果和其左边相邻小朋友拿到的水果不同(最左......
  • 第十二届蓝桥杯c++b组国赛题解(还在持续更新中...)
    试题A:带宽解题思路:由于小蓝家的网络带宽是200Mbps,即200Mb/s,所以一秒钟可以下载200Mb的内容,根据1B=8b的换算规则,所以200Mb=200/8MB=25MB。所以小蓝家的网络理论上每秒钟最多可以从网上下载25MB的内容。代码实现:#include<iostream>#include<algorithm>usingnamespacestd......
  • 【蓝桥杯 2019 省 A】修改数组【并查集】
    链接https://www.luogu.com.cn/problem/P8686题意给你\(n\)个数a[1...n],从\(a_2\)开始,如果和之前的某个数具有相等的值,就一直让\(a_i=a_i+1\),直到前面的任何一个数都和它不相等\(1\leqn\leq10^5\),\(1\leqa_i\leq10^6\)问最后的序列是什么思路暴力做法......
  • 蓝桥杯----2022国C
    《斐波那契与7》写的时候第一次尝试了暴力,跑了一个小时多都没有跑完查了一下,大概1s可以跑1e8条指令如果真要跑的话 202202011200,应该跑到比赛结束应该内跑完(希望电脑不会炸) 暴力还是不合理的,遇到这种情况试一下循环节对于斐波那契数列Fn=Fn-1+Fn-2所......
  • 【蓝桥杯集训·每日一题】AcWing 4309. 消灭老鼠
    写在前面本人CSDN博客主页:这里一、题目1、原题链接4309.消灭老鼠2、题目描述约翰的农场可以看作一个二维平面。农场中有n个老鼠,在毁坏着农田。第i个老鼠的位置坐标为(xi,yi)。不同老鼠可能位于同一位置。在(x0,y0)处,装有一个双向发射的激光枪,该位置没有老鼠。激光枪每次发......
  • 【蓝桥杯集训·每日一题】AcWing 3625. 幂次方
    写在前面本人CSDN博客主页:这里一、题目1、原题链接3625.幂次方2、题目描述对任意正整数N,计算XNmod233333的值。输入格式共一行,两个整数X和N。输出格式共一行,一个整数,表示XNmod233333的值。数据范围1≤X,N≤109输入样例:25输出样例:32二、解题报告1、思路分析(1)快速幂模板题......
  • 【蓝桥杯入门不入土】变幻莫测的链表
    @[toc]一:链表的类型单链表什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。如图所示:双链表单链表中的指针域只......
  • 蓝桥杯2022年第十三届决赛真题-斐波那契数组(动态规划)
    题目描述如果数组A=(a0,a1,···,an−1)满足以下条件,就说它是一个斐波那契数组:n≥2;a0=a1;对于所有的i(i≥2),都满足ai=ai−1+ai−2。现在,给出一个数组A,你可以执行任意次修改,每次修改将数组中的某个位置的元素修改为一个大于0的整数。请问最......