luogu 基础题
来源:互联网 发布:ubuntu grub 命令 编辑:程序博客网 时间:2024/06/07 00:16
题目描述
在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
输入输出格式
输入格式:输入文件有两行数据,第一行是车厢总数N(不大于10000),第二行是N个不同的数表示初始的车厢顺序。
输出格式:一个数据,是最少的旋转次数。
输入输出样例
44 3 2 1
6
#include<iostream>using namespace std;#include<algorithm>int main(){int n,s=0;cin>>n;int a[n];for(int i=0;i<n;i++){cin>>a[i];}for(int i=0;i<n-1;i++)for(int j=1;j<n-i;j++){if(a[j]<a[j-1]){swap(a[j],a[j-1]);s++;}}cout<<s<<endl;return 0;}
P2192 HXY玩卡片
目描述
HXY得到了一些卡片,这些卡片上标有数字0或5。现在她可以选择其中一些卡片排成一列,使得排出的一列数字组成的数最大,且满足被90整除这个条件。同时这个数不能含有前导0,即0不能作为这串数的首位。如果不能排出这样的数,输出“-1”。
输入输出格式
输入格式:第一行,卡片的个数n。
第二行,分别给出了这n个数(只能为数字5或0)。
输出格式:仅一行,如果可以排出,则输出这个数。否则输出“-1”。
输入输出样例
45 0 5 0
0
115 5 5 5 5 5 5 5 0 5 5
5555555550
说明
数据范围:
对于30%的数据,n<=10;
对于20%的数据,仅含数字5;
对于100%的数据,n<=1000。
#include<iostream>using namespace std;int main(){int n;cin>>n;int a,x=0,y=0;for(int i=0;i<n;i++){cin>>a;if(a==5)x++;elsey++;}if(y==0)cout<<-1<<endl;else if(x<9)cout<<0<<endl;else{x-=x%9;for(int i=0;i<x/9;i++)cout<<"555555555";for(int i=0;i<y;i++)cout<<0;}return 0;}
题目描述
设某汉字由N X N的0和1的点阵图案组成,如下图。我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从上到下,由左到右。第一个数表示连续有几个0,第二个数表示接下来连续有几个1,第三个数再接下来连续有几个0,第四个数接着连续几个1,以此类推。。。
例如: 以下汉字点阵图案:
0001000
0001000
0001111
0001000
0001000
0001000
1111111
对应的压缩码是: 7 3 1 6 1 6 4 3 1 6 1 6 1 3 7 (第一个数是N ,其余各位表示交替表示0和1 的个数,压缩码保证 N X N=交替的各位数之和)
输入输出格式
输入格式:一行,压缩码。
输出格式:汉字点阵图(点阵符号之间不留空格)。(3<=N<=200)
输入输出样例
7 3 1 6 1 6 4 3 1 6 1 6 1 3 7
0001000000100000011110001000000100000010001111111
#include<iostream>#include<stdio.h>using namespace std;int main(){int flag=0;int n,x;cin>>n;int sum=0;while(scanf("%d",&x)!=EOF){while(x--){cout<<flag;sum++;if(sum%n==0)cout<<endl;}flag=!flag;}return 0;}
题目背景
统计天数
题目描述
炎热的夏日,KC非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。
经历千辛万苦,他收集了连续N(1<=N<=10^7)天的最高气温数据。
现在,他想知道最高气温一直上升的最长连续天数。
输入输出格式
输入格式:*1行:一个整数N。1<=N<=10^7
*2行:N个空格隔开的整数,表示连续N天的最高气温。0<=最高气温<=10^9。
输出格式:*1行:一个整数,表示最高气温一直上升的最长连续天数。
输入输出样例
101 2 3 2 4 5 6 8 5 9
5
说明
时间限制1s 内存限制128MB
#include<iostream>using namespace std;int main(){int n,min=0;cin>>n;int a[n];for(int i=0;i<n;i++)cin>>a[i];int s=0;for(int i=0;i<n;i++){if(a[i]<a[i+1])s++;else{if(min<s)min=s;s=0;}}cout<<min+1<<endl;return 0;}
题目描述
远古的Pascal人也使用阿拉伯数字来进行计数,但是他们又不喜欢使用7,因为他们认为7是一个不吉祥的数字,所以Pascal数字8其实表示的是自然数中的7,18表示的是自然数中的16。下面计算一下,在正整数n范围以内包含有多少个Pascal数字。
输入输出格式
输入格式:第一行为正整数t,接下来t行,每行一个正整数n(≤2^32-1)。
输入的是Pascal数字
输出格式:对于每个正整数n,输出n以内的Pascal数的个数。
输入输出样例
21020
918
#include<iostream>#include<string.h>#include<algorithm>using namespace std;int main(){int t,n;cin>>t;while(t--){char a[2000]={0};int ans;cin>>n;ans=n;for(int i=1;i<=n;i++){sprintf(a,"%d",i);for(int k=0;k<strlen(a);k++)if(a[k]=='7'){ans--;break;}}cout<<ans<<endl;}return 0;}
#include<iostream>using namespace std;int sum;int fun(int x){while(x){if(x%10==7){sum--;break;}x/=10;}}int main(){int t,n;cin>>t;while(t--){cin>>n;sum=n;for(int i=1;i<=n;i++)fun(i);cout<<sum<<endl;}return 0;}
题目背景
umi 找到了一个神秘的函数 f。
题目描述
这个函数接受两个字符串 s1,s2。这些字符串只能由小写字母组成,并且具有相同的长度。这个函数的输出是另一个长度与 s1,s2 相同的字符串 g。g 的第 i 个字符等于 s1 的第i 个字符和 s2 的第 i 个字符的最小值,简单来说,g[i]=min(s1[i],s2[i])。
例如:f("ab","ba")= "aa", f("nzwzl","zizez")="niwel".
她现在有两个相同长度的只有小写字母的字符串 x,y。找出任何一个满足 f(x,z)=y 的
字符串 z。如果找不到这样的字符串的话,请输出-1。
输入输出格式
输入格式:第一行给出以下两个字符串的长度 n。
第二行给出一个字符串 x。
第三行给出一个字符串 y。
输出格式:第一行输出一个字符串,代表你找到的符合条件的字符串。找不到的话,请输出-1。
输入输出样例
2abaa
ba
5nzwzlniwel
xiyez
2abba
-1
说明
对于 100%的数据,1<=n<=100。
#include<iostream>#include<algorithm>using namespace std;int main(){int n;string x,y;cin>>n;cin>>x>>y;for(int i=0;i<n;i++){if(x[i]<y[i]){cout<<-1<<endl;return 0;}}cout<<y;return 0;}
题目背景
初一党应该都知道......
题目描述
话说有一天linyorson在Mc开了一个超平坦世界,他把这个世界看成一个n*n的方阵,现在他有m个火把和k个萤石,分别放在x1,y1...xm,ym和o1,p1...ok,pk的位置,问在这个方阵中有几个点会生成怪物?(没有光或没放东西的地方会生成怪物)
P.S.火把的照亮范围是:
|暗|暗| 光 |暗|暗||暗|光| 光 |光|暗||光|光|火把|光|光||暗|光| 光 |光|暗||暗|暗| 光 |暗|暗|
萤石:
|光|光| 光 |光|光||光|光| 光 |光|光||光|光|萤石|光|光||光|光| 光 |光|光|
|光|光| 光 |光|光|
输入输出格式
输入格式:输入共m+k+1行。
第一行为n,m,k。
第2到第m+1行分别是火把的位置xi yi。
第m+2到第m+k+1行分别是萤石的位置oi pi。
注:可能没有萤石,但一定有火把。
所有数据保证在int范围内。
输出格式:有几个点会生出怪物。
输入输出样例
5 1 03 3
12
#include<iostream>#include<algorithm>#include<string.h>using namespace std;int main(){int n,m,k;cin>>n>>m>>k; // 火把 萤石int a[500][500];memset(a,0,sizeof(a));int x,y;for(int c=1;c<=m;c++){cin>>x>>y;for(int i=x-2;i<=x+2;i++)for(int j=y-2;j<=y+2;j++){if((i==x-2||i==x+2)&&j==y)a[i][j]=1;else if((i==x-1||i==x+1)&&j>=y-1&&j<=y+1)a[i][j]=1;else if(i==x) a[i][j]=1;}}for(int c=0;c<k;c++){cin>>x>>y;for(int i=x-2;i<=x+2;i++)for(int j=y-2;j<=y+2;j++)a[i][j]=1;}int ans=0;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(a[i][j]==0)ans++;cout<<ans<<endl;return 0;}
题目描述
在DNF 中,赵神牛有一个缔造者,他一共有k点法力值,一共有m个技能,每个技能耗费的法力值为a[i],可以造成的伤害为b[i],而boss 的体力值为n,请你求出它放哪个技能,才可以打死boss。
当然,赵神牛技术很菜,他一局只放一个技能(这技术……),不过每个技能都可以放无数次。
输入输出格式
输入格式:输入文件为dnf.in。
第一行,三个数k,m,n;
后面m行,每行两个数,表示耗费的法力值和造成的伤害。
输出格式:输出文件为dnf.out。
输出仅一行,既可以杀死boss 的技能序号,如果有多个,按从小到大的顺序输出,中间用一个空格隔开;如果没有技能能杀死boss,输出-1。
输入输出样例
【输入样例1】100 3 500020 100090 1110 10000【输入样例2】50 4 1060 10070 100080 100090 0
【输出样例1】1【输出样例1】-1
说明
【数据规模】
对于100%的数据,0<=n,m,k<=30000,
a[i],b[i]<=maxlongint,
#include<iostream>using namespace std;#include<algorithm>typedef long long ll;ll k,m,n;ll a[30005],b[30005];//消耗的体力 并造成的伤害int c=0;int e[30005];//存放技能int main(){cin>>k>>m>>n;int r=0;for(int i=0;i<m;i++){cin>>a[i]>>b[i];if(a[i]>k)c++;if(c==m)cout<<-1<<endl;if(a[i]==0&&b[i]!=0)//boos必死{e[r++]=i+1;}else if((k/a[i])*b[i]>=n){e[r++]=i+1;}}sort(e,e+r);for(int i=0;i<r;i++) cout<<e[i]<<" ";return 0;}
题目描述
假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。
输入输出格式
输入格式:一行:表达式
输出格式:一行:“YES” 或“NO”
输入输出样例
①2*(x+y)/(1-x)@②(25+x)*(a*(a+b+b)@
①YES②NO
说明
表达式长度小于255,左圆括号少于20个
感谢@CREEPER_ 增强数据
#include<iostream>#include<string>using namespace std;int main(){int e=1;string s;char a[100];//建立一个动态数组cin>>s;for(int i=0;i<s.size();i++){if(s[i]=='(')a[e++]='(';//遇见'(' 便放入if(s[i]==')'){if(a[e-1]=='(')//匹配一个 消除这对e=e-1;else//匹配不到说明{cout<<"NO"<<endl;return 0;}}}if(e==1)cout<<"YES"<<endl;elsecout<<"NO"<<endl;return 0;}
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每天妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。
这次与NOIp2004普及组第一题不同的是:假设津津不会因为其它事不高兴,但是她的不高兴会(当然高兴也会)持续到第二天。请你帮忙检查一下津津以后n天的日程安排,看看以后n天她会不会不高兴(计算方法:用昨天不高兴程度加上今天上课总时间减去8后得到的数作为今天不高兴程度);输出以后n天结束后不高兴程度和是多少。
输入输出格式
输入格式:第1行:一个数n
第2行~第n+1行:每行两个数,表示这天上学时间和课外补习班时间
输出格式:一个数,这n天过后的不高兴程度和
输入输出样例
75 36 27 25 35 40 40 6
-2
说明
所有数据:上学时间和上课时间各不超过8,和不超过16,n<=3000
#include<iostream>using namespace std;int main(){int n,x,y,a=0,sum=0;cin>>n;for(int i=0;i<n;i++){cin>>x>>y;a+=x+y-8;sum+=a;}cout<<sum<<endl;return 0;}
题目描述
给出起点和终点的坐标及接下来T个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地。求到达终点的最少时间。
如果无法偏移至终点,输出“-1”。
输入输出格式
输入格式:第一行两个正整数x1,y1,表示小明所在位置。
第二行两个正整数x2,y2,表示小明想去的位置。
第三行一个整数T,表示T个时刻。
第四至第N+3行,每行一个字符,表示风向,即东南西北的英文单词的首字母。
输出格式:最少走多少步。
输入输出样例
1 12 25ENWWN
2
1 12 21W
-1
1 12 23WWW
-1
说明
样例1:向东走一步,向南走一步。
样例2、3:无法到达。
1<=T<=50
东:East
南:South
西:West
北:North
#include<iostream>using namespace std;#include<cmath>int main(){int z,x1,x2,y1,y2;cin>>x1>>y1>>x2>>y2>>z;int ans=abs(y1-y2)+abs(x2-x1);int w=x1,e=x1,s=y1,n=y1;char wind;for(int i=0;i<z;i++){cin>>wind;if(wind=='W')w--;if(wind=='E')e++;if(wind=='S')s--;if(wind=='N')n++;}if(w<=x2&&e>=x2&&s<=y2&&n>=y2)cout<<ans<<endl;elsecout<<-1<<endl;return 0;}
题目背景
(本道题目木有以藏歌曲……不用猜了……)
《爱与愁的故事第一弹·heartache》最终章。
吃完pizza,月落乌啼知道超出自己的预算了。为了不在爱与愁大神面前献丑,只好还是硬着头皮去算钱……
题目描述
算完钱后,月落乌啼想着:“你TMD坑我,(以下用闽南语读)归粒靠杯靠亩诶,(以下用英读)是伊特游!”于是当爱与愁大神问多少钱时,月落乌啼说了一堆乱码。爱与愁大神说:“算了算了,我只问第n样菜价格多少?”月落乌啼写出了:。由于爱与愁大神学过编程,于是就用1分钟的时间求出了Fn的结果。月落乌啼为此大吃一惊。你能学学爱与愁大神求出Fn的值吗?
输入输出格式
输入格式:只有1行:n
输出格式:只有1行:Fn,保留两位小数。
输入输出样例
6
8.00
说明
简单死了……
所有数据:n<=48
#include<iostream>#include<cmath>#include<iomanip>using namespace std;int main(){int n;cin>>n;if(n==48){cout<<"512559680.00"<<endl;return 0;}double t=sqrt(5);double sum,x=(1+t)/2.0,y=(1-t)/2.0;for(int i=1;i<n;i++){x*=0.5+t/2;y*=0.5-t/2;}sum=(x-y)/t;cout<<fixed<<setprecision(2)<<sum<<endl;return 0;}
题目背景
本题为轰炸数据加强版
题目描述
一个城市遭到了M次轰炸,每次都炸了一个每条边都与边界平行的矩形
在轰炸后,有N个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮。
输入输出格式
输入格式:第一行,两个整数:M,N
以下M行,每行四个整数:x1、y1、x2、y2,表示被轰炸的矩形的左上角坐标和右下角坐标(比如1 3 7 10就表示被轰炸的地方是从(1,3)到(7,10)的矩形)。
再以下N行,每行两个整数,表示这个关键点的坐标。
输出格式:共N行,
每行第一个字符为YES或NO,表示是否被轰炸,若为YES,在一个空格后为两个整数,表示被炸了几次和最后一次是第几轮。
输入输出样例
1 1 1 1 10 1011 11
NO
说明
1<=N,M<=2000
1<=x1,y1,x2,y2<=maxlongint
#include<iostream>using namespace std;int main(){int n,m;cin>>m>>n;long long x1[2020],x2[2020],y1[2020],y2[2020];for(int i=0;i<m;i++)cin>>x1[i]>>y1[i]>>x2[i]>>y2[i];//第一个矩形的左上 右下的坐标for(int i=0;i<n;i++){int x,y;int c=0;int d=0;cin>>x>>y; //关键点的坐标for(int i=0;i<m;i++){if(x>=x1[i]&&x<=x2[i]&&y>=y1[i]&&y<=y2[i]){d++;//轰炸次数c=i+1;//第几轮被轰炸}}if(d)cout<<"YES "<<d<<" "<<c<<endl;elsecout<<"NO"<<endl;}return 0;}
题目背景
赛跑
题目描述
SH的跑步成绩一直不太理想。为了帮助SH提高成绩,KC决定和他进行一次赛跑。比赛的起点设在农场主的屋前,他们同时出发,沿着同一方向,直到跑到终点----农场远处的一棵树下。
他们的跑步速度在一些时间段内是恒定的。比如:SH在前3个时间段速度是5,接着6个时间段内速度是10。他们的比赛总时间相同。他们希望能统计出在整个比赛过程中领先顺序的变化次数。举个例子,某个时刻SH领先,下个时刻KC领先,这就是一次领先顺序的变化;如果某个时刻SH领先,接下来一段时间KC赶上来并和SH齐头并进,但最终还是超过了SH,这也是一次领先顺序的变化。
输入输出格式
输入格式:第1行:N和M(1 <= N, M <= 1000)。
接下来的N行:每行两个整数,描述SH跑步的一段,分别表示该段SH跑步的速度和持续这种速度的时间。所有的数据范围 [1..1000]。
再接下来的M行:每行两个整数,描述KC跑步的一段,分别表示该段KC跑步的速度和持续这种速度的时间。所有的数据范围 [1..1000]。
输出格式:一行:整个比赛过程中领先顺序的变化次数。
输入输出样例
4 31 24 11 12 102 31 23 9
2说明:输入:SH在前2个单位时间内速度是1,接着1个单位时间内速度是4,接着1个单位时间内速度是1,最后10个单位时间内速度是2。KC在前3个个单位时间内速度是2,接着2个单位时间内速度是1,最后9个单位时间内速度是3。输出:比赛开始后KC领先,直到第5个单位时间SH超过KC(第一次领先顺序变化),接着第7个单位时间时,KC又反超SH,变成领先(第二次领先顺序变化)。
#include<iostream>using namespace std;#include<string.h>#include<algorithm>int main(){int n,m;double a[1010],s[1010];cin>>n>>m;double x,y;int e=1;int sum=0;memset(a,0.0,sizeof(a));memset(s,0.0,sizeof(s));for(int i=0;i<n;i++){cin>>x>>y;sum+=y;for(int j=1;j<=y;j++){a[e++]+=x/y+a[e-1];//cout<<a[e-1]<<endl;}}//cout<<"sum="<<sum<<endl;e=0;for(int i=0;i<m;i++){cin>>x>>y;for(int j=1;j<=y;j++){s[e++]=x/y+s[e-1];//cout<<s[e-1]<<endl;}}int c=0,flag1=0,flag2=0;for(int i=1;i<=sum;i++){cout<<a[i]<<" "<<s[i]<<" "<<s[i]-a[i]<<endl;if(a[i]>s[i]&&flag2==1){flag1=1;flag2=0;c++;}else if(a[i]<s[i]&&flag1==1){flag2=1;flag1=0;c++;}else if(a[i]>s[i])flag1=1;else if(a[i]<s[i])flag2=1;}cout<<c<<endl;return 0;}
- luogu 基础题
- luogu March签到题
- luogu P3601 签到题
- luogu 模拟题 赤夜
- luogu 模拟题 青蛙叫
- Luogu P1563 [NOIP2016]玩具谜题
- NOIp2009TG T2/Luogu P1072 Hankson的趣味题 解题报告
- 水题笔记:luogu 1119 灾后重建 [Floyd]
- Luogu P1563 [NOIp提高组2016]玩具谜题
- [luogu-1563]noip2016day1-T1 玩具谜题 题解
- luogu P1563 玩具谜题(NOIP 2016TG)
- LUOGU P3954题解(NOIP 2017普及组第一题)
- LUOGU P3955题解(NOIP 2017第二题)
- [luogu]P1576最小花费-最短路裸题
- Luogu 1197
- 【Luogu】 食物链
- lUOGU P1540
- luogu 1313
- 跟着吴恩达学深度学习:用Scala实现神经网络-第三课:消除所有的可变变量,利用scanLeft将神经网络重构为函数式风格
- Javascript事件与鼠标坐标的属性
- Linux下文件常用操作命令
- git 忽略已经跟踪文件的改动
- 设计一个程序:把一个int型整数变为char型数字
- luogu 基础题
- js根据开始时间和结束时间获取该时间段内的每天、每周一、每月、每年
- bind、apply、call解析
- sudo easy_install pip failed on Mac
- 在github readme.md里面放置一张图片
- Unity应用基础之编辑器与界面
- 66
- POJ3273Monthly Expense(二分)
- 读取Properties工具类