失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-979 移动

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-979 移动

时间:2020-09-04 18:02:04

相关推荐

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-979 移动

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-979 移动

目录

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-979 移动

前言

关于数学的疑问

算法训练 移动

C语言

C++语言

Java语言

Python语言

总结

第六届——第十三届省赛题解

第六届——第十二届国赛题解

前言

这段时间我会把蓝桥杯官网上的所有非VIP题目都发布一遍,让大家方便去搜索,所有题目都会有几种语言的写法,帮助大家提供一个思路,当然,思路只是思路,千万别只看着答案就认为会了啊,这个方法基本上很难让你成长,成长是在思考的过程中找寻到自己的那个解题思路,并且首先肯定要依靠于题海战术来让自己的解题思维进行一定量的训练,如果没有这个量变到质变的过程你会发现对于相对需要思考的题目你解决的速度就会非常慢,这个思维过程甚至没有纸笔的绘制你根本无法在大脑中勾勒出来,所以我们前期学习的时候是学习别人的思路通过自己的方式转换思维变成自己的模式,说着听绕口,但是就是靠量来堆叠思维方式,刷题方案自主定义的话肯定就是从非常简单的开始,稍微对数据结构有一定的理解,暴力、二分法等等,一步步的成长,数据结构很多,一般也就几种啊,线性表、树、图、再就是其它了。顺序表与链表也就是线性表,当然栈,队列还有串都是属于线性表的,这个我就不在这里一一细分了,相对来说都要慢慢来一个个搞定的。蓝桥杯中对于大专来说相对是比较友好的,例如三分枚举、离散化,图,复杂数据结构还有统计都是不考的,我们找简单题刷个一两百,然后再进行中等题目的训练,当我们掌握深度搜索与广度搜索后再往动态规划上靠一靠,慢慢的就会掌握各种规律,有了规律就能大胆的长一些难度比较高的题目了,再次说明,刷题一定要循序渐进,千万别想着直接就能解决难题,那只是对自己进行劝退处理。加油,平常心,一步步前进。

关于数学的疑问

蓝桥杯中涉及到的数学说多不多,说少也不少,这里罗列了一下能用到的,其中红色的是【大学C组】会使用到的

1、简单数学(基础运算)

2、位运算

3、线性代数

4、离散数学(组合数学)

5、初等数论(整数的性质)

6、概率论

7、几何

虽然看到了线性代数、离散数学、初等数论,但是对于C组来说不会考的太复杂,会基础就好。

算法训练 移动

资源限制

内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

问题描述

给定一个n长的数列,有m次操作,第i次操作表示将整个数列循环移动mi位,询问每次操作结束后的开头k个数字

输入格式

第一行三个整数n,m,k。

第二行n个整数表示数列。

接下来m行,每行一个整数mi,表示移动位数,若mi为正,表示向左移mi位,若mi为负数,表示向右移-mi位。

输出格式

m行,每行k个数,表示开头k个数字

样例输入

5 2 3

1 2 3 4 5

2

-2

样例输出

3 4 5

1 2 3

数据规模和约定

n<=1000000

m<=100000

k<=min(10,n)

mi<=100000000

题解:

C语言

#include<stdio.h>int a[1000005];int main(){int n,m,k,t = 0,count,i,j,index;scanf("%d%d%d",&n,&m,&k);for(i = 0; i < n; i++){scanf("%d",&a[i]);}for(i = 1; i <= m; i++){scanf("%d",&count);t += count;while(t <= 0){t += n;} for(j = t; j <= t+k-1; j++){index = (j+n) % n;printf("%d ",a[index]);}printf("\n"); } return 0;}

C++语言

#include<stdio.h>#include<string.h>#include<stdlib.h>const int N=1e6+6;int a[N];int main(){int n,m,k,i;scanf("%d%d%d",&n,&m,&k);//数组长度是n,询问m次,输出移动后的前k个数字for(i=0;i<n;i++)scanf("%d",&a[i]);//存入数字 int sum=0;//相对原始数组移动的数值 while(m--){int mi;scanf("%d",&mi);sum+=mi;//每次移动的数值累加 sum=(sum%n+n)%n;//每次相对原始数组需要移动的数值 int e=0;for(int i=sum;;e++){if(e==k) break;i=(sum+e)%n;printf("%d ",a[i]);}putchar('\n');}return 0;}

Java语言

在扫描输入内容上会有不同的方法,但是与Scanner的用法是相同的。只是相对的录入速度快于Scanner这样在整体运算的过程中可以适当节约时间。

import java.io.*;import java.util.*;public class Main {static int n,m,k,arr[],idx;static List<Integer> list=new ArrayList<>();static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));static StreamTokenizer in = new StreamTokenizer(bf);static PrintWriter out = new PrintWriter(System.out);public static void main(String[] args) throws IOException {solve();out.flush();}static void solve() throws IOException {in.nextToken();n=(int)in.nval;in.nextToken();m=(int)in.nval;in.nextToken();k=(int)in.nval;arr=new int[n];idx=0;for(int i=0;i<n;++i){in.nextToken();arr[i]=(int)in.nval;}for(int i=0;i<m;++i){in.nextToken();int move=(int)in.nval;idx+=move;while(idx<0) idx+=n;idx%=n;for(int j=idx;j<idx+k;++j){out.print(arr[j%n]+" ");}out.println();}}}

Python语言

相对简洁,但是需要对Python的一些语法很了解,特别是列表推导式的熟悉。

n,m,k=map(int,input().split())ls=list(map(int,input().split()))ls_m=[]for a in range(m):ls_m.append(int(input()))head=0for a in ls_m:if(a<0):c = -(abs(a)%n)else:c=a%nhead +=cif(head<0):head += nelif(head>=n):head-=nif(head+k>n):print(str(ls[head:]+ls[:k-n+head])[1:-1].replace(',',''))else:print(str(ls[head:head+k])[1:-1].replace(',',''))

总结

没有什么不付出就能拿到的结果,我们都是在负重前行,最终结果与自身先天的脑力有一定的关系,但是还是有很大一部分看自己后天的努力,其实从报名到比赛也就5个月左右,真正刷题的事件也就2个月,2个月回忆一下你真正的认真刷过题吗,如果你真的用尽所有的精力去努力了,那么我相信你最终的成绩一定会让你满意的,加油。

第六届——第十三届省赛题解

所有的题目都做了讲解,最难的有配套的视频,视频提供者是【级的弓家宜】先生。

第六届——第十二届国赛题解

所有题目均有题解,部分第10题非最优解,至少跑20%数据。

如果觉得《第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-979 移动》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。