在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
输入文件有两行数据,第一行是车厢总数N(不大于10000),第二行是N个不同的数表示初始的车厢顺序。
输出格式:一个数据,是最少的旋转次数。
4 4 3 2 1
6
#include
using namespace std;
#include
int main()
{
int n,s=0;
cin>>n;
int a[n];
for(int i=0;i>a[i];
}
for(int i=0;i
P2192 HXY玩卡片
目描述
HXY得到了一些卡片,这些卡片上标有数字0或5。现在她可以选择其中一些卡片排成一列,使得排出的一列数字组成的数最大,且满足被90整除这个条件。同时这个数不能含有前导0,即0不能作为这串数的首位。如果不能排出这样的数,输出“-1”。
第一行,卡片的个数n。
第二行,分别给出了这n个数(只能为数字5或0)。
输出格式:仅一行,如果可以排出,则输出这个数。否则输出“-1”。
4 5 0 5 0
0
11 5 5 5 5 5 5 5 5 0 5 5
5555555550
数据范围:
对于30%的数据,n<=10;
对于20%的数据,仅含数字5;
对于100%的数据,n<=1000。
#include
using namespace std;
int main()
{
int n;
cin>>n;
int a,x=0,y=0;
for(int i=0;i>a;
if(a==5)
x++;
else
y++;
}
if(y==0)
cout<<-1<
设某汉字由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
0001000 0001000 0001111 0001000 0001000 0001000 1111111
#include
#include
using namespace std;
int main()
{
int flag=0;
int n,x;
cin>>n;
int sum=0;
while(scanf("%d",&x)!=EOF)
{
while(x--)
{
cout<
统计天数
炎热的夏日,KC非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。
经历千辛万苦,他收集了连续N(1<=N<=10^7)天的最高气温数据。
现在,他想知道最高气温一直上升的最长连续天数。
*1行:一个整数N。1<=N<=10^7
*2行:N个空格隔开的整数,表示连续N天的最高气温。0<=最高气温<=10^9。
输出格式:*1行:一个整数,表示最高气温一直上升的最长连续天数。
10 1 2 3 2 4 5 6 8 5 9
5
时间限制1s 内存限制128MB
#include
using namespace std;
int main()
{
int n,min=0;
cin>>n;
int a[n];
for(int i=0;i>a[i];
int s=0;
for(int i=0;i
远古的Pascal人也使用阿拉伯数字来进行计数,但是他们又不喜欢使用7,因为他们认为7是一个不吉祥的数字,所以Pascal数字8其实表示的是自然数中的7,18表示的是自然数中的16。下面计算一下,在正整数n范围以内包含有多少个Pascal数字。
第一行为正整数t,接下来t行,每行一个正整数n(≤2^32-1)。
输入的是Pascal数字
输出格式:对于每个正整数n,输出n以内的Pascal数的个数。
2 10 20
9 18
#include
#include
#include
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
#include
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<
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。
2 ab aa
ba
5 nzwzl niwel
xiyez
2 ab ba
-1
对于 100%的数据,1<=n<=100。
#include
#include
using namespace std;
int main()
{
int n;
string x,y;
cin>>n;
cin>>x>>y;
for(int i=0;i
初一党应该都知道......
话说有一天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 0 3 3
12
#include
#include
#include
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>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<
在DNF 中,赵神牛有一个缔造者,他一共有k点法力值,一共有m个技能,每个技能耗费的法力值为a[i],可以造成的伤害为b[i],而boss 的体力值为n,请你求出它放哪个技能,才可以打死boss。
当然,赵神牛技术很菜,他一局只放一个技能(这技术……),不过每个技能都可以放无数次。
输入文件为dnf.in。
第一行,三个数k,m,n;
后面m行,每行两个数,表示耗费的法力值和造成的伤害。
输出格式:输出文件为dnf.out。
输出仅一行,既可以杀死boss 的技能序号,如果有多个,按从小到大的顺序输出,中间用一个空格隔开;如果没有技能能杀死boss,输出-1。
【输入样例1】 100 3 5000 20 1000 90 1 110 10000 【输入样例2】 50 4 10 60 100 70 1000 80 1000 90 0
【输出样例1】 1 【输出样例1】 -1
【数据规模】
对于100%的数据,0<=n,m,k<=30000,
a[i],b[i]<=maxlongint,
#include
using namespace std;
#include
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>a[i]>>b[i];
if(a[i]>k)
c++;
if(c==m)
cout<<-1<=n)
{
e[r++]=i+1;
}
}
sort(e,e+r);
for(int i=0;i
假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。
一行:表达式
输出格式:一行:“YES” 或“NO”
① 2*(x+y)/(1-x)@ ② (25+x)*(a*(a+b+b)@
① YES ② NO
表达式长度小于255,左圆括号少于20个
感谢@CREEPER_ 增强数据
#include
#include
using namespace std;
int main()
{
int e=1;
string s;
char a[100];//建立一个动态数组
cin>>s;
for(int i=0;i
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每天妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。
这次与NOIp2004普及组第一题不同的是:假设津津不会因为其它事不高兴,但是她的不高兴会(当然高兴也会)持续到第二天。请你帮忙检查一下津津以后n天的日程安排,看看以后n天她会不会不高兴(计算方法:用昨天不高兴程度加上今天上课总时间减去8后得到的数作为今天不高兴程度);输出以后n天结束后不高兴程度和是多少。
第1行:一个数n
第2行~第n+1行:每行两个数,表示这天上学时间和课外补习班时间
输出格式:一个数,这n天过后的不高兴程度和
7 5 3 6 2 7 2 5 3 5 4 0 4 0 6
-2
所有数据:上学时间和上课时间各不超过8,和不超过16,n<=3000
#include
using namespace std;
int main()
{
int n,x,y,a=0,sum=0;
cin>>n;
for(int i=0;i>x>>y;
a+=x+y-8;
sum+=a;
}
cout<
给出起点和终点的坐标及接下来T个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地。求到达终点的最少时间。
如果无法偏移至终点,输出“-1”。
第一行两个正整数x1,y1,表示小明所在位置。
第二行两个正整数x2,y2,表示小明想去的位置。
第三行一个整数T,表示T个时刻。
第四至第N+3行,每行一个字符,表示风向,即东南西北的英文单词的首字母。
输出格式:最少走多少步。
1 1 2 2 5 E N W W N
2
1 1 2 2 1 W
-1
1 1 2 2 3 W W W
-1
样例1:向东走一步,向南走一步。
样例2、3:无法到达。
1<=T<=50
东:East
南:South
西:West
北:North
#include
using namespace std;
#include
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>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<
(本道题目木有以藏歌曲……不用猜了……)
《爱与愁的故事第一弹·heartache》最终章。
吃完pizza,月落乌啼知道超出自己的预算了。为了不在爱与愁大神面前献丑,只好还是硬着头皮去算钱……
算完钱后,月落乌啼想着:“你TMD坑我,(以下用闽南语读)归粒靠杯靠亩诶,(以下用英读)是伊特游!”于是当爱与愁大神问多少钱时,月落乌啼说了一堆乱码。爱与愁大神说:“算了算了,我只问第n样菜价格多少?”月落乌啼写出了:。由于爱与愁大神学过编程,于是就用1分钟的时间求出了Fn的结果。月落乌啼为此大吃一惊。你能学学爱与愁大神求出Fn的值吗?
只有1行:n
输出格式:只有1行:Fn,保留两位小数。
6
8.00
简单死了……
所有数据:n<=48
#include
#include
#include
using namespace std;
int main()
{
int n;
cin>>n;
if(n==48)
{
cout<<"512559680.00"<
本题为轰炸数据加强版
一个城市遭到了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 10 11 11
NO
1<=N,M<=2000
1<=x1,y1,x2,y2<=maxlongint
#include
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>x1[i]>>y1[i]>>x2[i]>>y2[i];//第一个矩形的左上 右下的坐标
for(int i=0;i>x>>y; //关键点的坐标
for(int i=0;i=x1[i]&&x<=x2[i]&&y>=y1[i]&&y<=y2[i])
{
d++;//轰炸次数
c=i+1;//第几轮被轰炸
}
}
if(d)
cout<<"YES "<
赛跑
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 3 1 2 4 1 1 1 2 10 2 3 1 2 3 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
using namespace std;
#include
#include
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>x>>y;
sum+=y;
for(int j=1;j<=y;j++)
{
a[e++]+=x/y+a[e-1];
// cout<>x>>y;
for(int j=1;j<=y;j++)
{
s[e++]=x/y+s[e-1];
// cout<s[i]&&flag2==1)
{
flag1=1;
flag2=0;
c++;
}
else if(a[i]s[i])
flag1=1;
else if(a[i]