就“24.11.14学习总结”的第一题的代码修改。
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
int d[a+1][a+1];
for(int i=0;i<=a;i++)
{
for(int j=0;j<=a;j++)
{
d[i][j]=0;
}
}
for(int i=0;i<b;i++)
{
int x1,y1,x2,y2;
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
d[x1-1][y1-1]++;
d[x1-1][y2]--;
d[x2][y1-1]--;
d[x2][y2]++;
}
for(int i=0;i<a;i++)
{
for(int j=0;j<a;j++)
{
d[i][j+1]+=d[i][j];
}
}
for(int i=0;i<a;i++)
{
for(int j=0;j<a;j++)
{
d[j+1][i]+=d[j][i];
}
}
for(int i=0;i<a;i++)
{
for(int j=0;j<a;j++)
{
if(j!=a-1)printf("%d ",d[i][j]);
else printf("%d\n",d[i][j]);
}
}
return 0;
}
题目描述
为了更好的备战 NOIP2013,电脑组的几个女孩子 LYQ,ZSC,ZHQ 认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑组的课余运动场地,听说她们都是电脑组的高手,校长没有马上答应他们,而是先给她们出了一道数学题,并且告诉她们:你们能获得的运动场地的面积就是你们能找到的这个最大的数字。
校长先给他们一个n×n 矩阵。要求矩阵中最大加权矩形,即矩阵的每一个元素都有一权值,权值定义在整数集上。从中找一矩形,矩形大小无限制,是其中包含的所有元素的和最大 。矩阵的每个元素属于 [−127,127] ,例如
0 –2 –7 0 9 2 –6 2 -4 1 –4 1 -1 8 0 –2
在左下角:
9 2 -4 1 -1 8
和为 15。
几个女孩子有点犯难了,于是就找到了电脑组精打细算的 HZH,TZY 小朋友帮忙计算,但是遗憾的是他们的答案都不一样,涉及土地的事情我们可不能含糊,你能帮忙计算出校长所给的矩形中加权和最大的矩形吗?
输入
第一行:n,接下来是 n 行 n 列的矩阵。
输出
最大矩形(子矩阵)的和。
样例输入
4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
样例输出
15
提示
1≤n≤120
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
int b[a][a],c[a][a];
for(int i=0;i<a;i++)
{
for(int j=0;j<a;j++)
{
c[i][j]=0;
}
}
for(int i=0;i<a;i++)
{
for(int j=0;j<a;j++)
{
scanf("%d",&b[i][j]);
if(j)c[i][j]=b[i][j]+c[i][j-1];
else c[i][j]=b[i][j];
}
}
int max=0;
for(int topstart=0;topstart<a;topstart++)
{
int tempmax=0;
for(int start=0;start<a;start++)
{
for(int end=start;end<a;end++)
{ int temp=0;
for(int top=topstart;top<a;top++)
{
if(start)temp+=c[top][end]-c[top][start-1];
else temp+=c[top][end];
tempmax=tempmax>temp?tempmax:temp;
}
}
}
max=max>tempmax?max:tempmax;
}
printf("%d",max);
return 0;
}
题目描述
学校和 yyy 的家之间的距离为 s米,而 yyy 以 v米每分钟的速度匀速走向学校。
在上学的路上,yyy 还要额外花费 10 分钟的时间进行垃圾分类。
学校要求必须在上午 8:00 到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。
由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。
输入格式
一行两个正整数 s,v,分别代表路程和速度。
输出格式
输出一个 24小时制下的时间,代表 yyy 最晚的出发时间。
输出格式为 HH:MM,分别代表该时间的时和分。必须输出两位,不足前面补 。
输入输出样例
输入
100 99
输出
07:48
说明/提示
对于 100%100% 的数据,1≤s,v≤1041≤s,v≤104。
对了90%的代码:
#include<stdio.h>
int main()
{
int a,b,c=10;
scanf("%d %d",&a,&b);
c+=(a%b==0)?a/b:a/b+1;
int h,m;
h=8-((c%60==0)?c/60:c/60+1);
m=(c%60==0)?0:60-(c<=60?c:c-c/60*60);
if(c>=480)h=24+h;
if(h<10&&m<10)printf("0%d:0%d",h,m);
else if(h>10&&m<10)printf("%d:0%d",h,m);
else if(h>10&&m>9)printf("%d:%d",h,m);
else printf("0%d:%d",h,m);
return 0;
}
题目描述
小 C 喜欢在一款叫做渊深的游戏中收集宝箱。
现在,小 C 在一条数轴上,他在数轴的原点处。
同时,在这条数轴上还有两个宝箱,它们的坐标分别为 a和 b。
只要小 C 移动到某个宝箱的位置,就认为小 C 收集到了这个宝箱。特殊地,如果小 C 初始时就在某个宝箱的位置,那么他可以直接收集到这个宝箱;如果两个宝箱在同一个位置,那么他可以同时收集这两个宝箱。
小 C 每次可以沿着这条数轴的正方向或负方向移动一个单位长度。小 C 想知道,收集到这两个宝箱至少需要移动多少次?
输入格式
两个整数 a,b。
输出格式
一个整数,表示小 C 收集到这两个宝箱所至少需要的移动次数。
输入输出样例
输入 #1复制
1 -1
输出 #1复制
3
输入 #2复制
-5 0
输出 #2复制
5
输入 #3复制
51 -154
输出 #3复制
256
说明/提示
【样例解释 #1】
小 C 可以先沿着数轴的负方向移动 11次,再沿着数轴的正方向移动 2次。
可以证明小 C 至少需要移动 3次。
【样例解释 #2】
小 C 可以直接沿着数轴的负方向移动 5 次。
可以证明小 C 至少需要移动 5 次。
#include<stdio.h>
int main()
{
int a,b,a1,b1;
scanf("%d %d",&a,&b);
a1=a>0?a:-a;
b1=b>0?b:-b;
if(a==b)printf("%d",a1);
else if(a==-b)printf("%d",3*a1);
else if((a<0&&b<0)||(a>0&&b>0))printf("%d",a1>b1?a1:b1);
else printf("%d",(a1>b1?b1:a1)*2+(a1>b1?a1:b1));
return 0;
}
题目描述
空间中有一些平台。给出每个平台的位置,请你计算从每一个平台的边缘落下之后会落到哪一个平台上。
注意,如果某两个平台的某个两边缘横坐标相同,物体从上面那个平台落下之后将不会落在下面那个平台上(即平台的范围是一个开区间,不包含端点)。平台可能会重叠。
从平台下落时视作从平台下方开始下落,也就是说不会落到高度相同的平台上。如果有两个平台的高度相同且都可以被落到的话,那么会落到编号靠前的那个平台。
输入格式
第一行有一个数 N表示平台的个数;
接下来 N 行每行三个整数 分别是平台的高度 Hi,左端点的 X 坐标 Li,右端点的 XX 坐标 Ri。
其中,1≤N≤10^3,0≤H,L,R≤2×10^4。
输出格式
输出共 N 行,每行两个数,分别表示:
从第 i 个平台的左边缘落下后到达的平台序号和右边缘落下以后到达的平台序号。
输入数据中第一个平台的序号是 1。如果某个平台的某个边缘下面没有平台了,输出 0。
对了40%的代码:
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
int b[a][3];
for(int i=0;i<a;i++)
{
scanf("%d %d %d",&b[i][0],&b[i][1],&b[i][2]);
}
int zmax=b[0][0],xmin=b[0][1],ymax=b[0][2];
for(int i=1;i<a;i++)
{
if(b[i][0]>zmax)zmax=b[i][0];
if(b[i][1]<xmin)xmin=b[i][1];
if(b[i][2]>ymax)ymax=b[i][2];
}
int c[2][ymax-xmin+1][zmax+1];
for(int i=0;i<2;i++)
{
for(int j=0;j<=ymax-xmin;j++)
{
for(int k=0;k<=zmax;k++)
{
c[i][j][k]=0;
}
}
}
for(int i=0;i<a;i++)
{
for(int j=b[i][1]+1;j<b[i][2];j++)
{
c[1][j][b[i][0]]=1;
if(!c[0][j][b[i][0]])c[0][j][b[i][0]]=i+1;
}
c[0][b[i][1]][b[i][0]]=i+1;
c[0][b[i][2]][b[i][0]]=i+1;
}
for(int i=0;i<a;i++)
{
for(int j=b[i][0]-1;j>=0;j--)
{
if(c[1][b[i][1]][j]==1){printf("%d ",c[0][b[i][1]][j]);
break;}
if(j==0&&c[1][b[i][1]][0]!=1)printf("0 ");
}
for(int j=b[i][0]-1;j>=0;j--)
{
if(c[1][b[i][2]][j]==1){printf("%d\n",c[0][b[i][2]][j]);
break;}
if(j==0&&c[1][b[i][2]][0]!=1)printf("0\n");
}
}
return 0;
}
标签:总结,输出,15,int,平台,24.11,a1,printf,宝箱 From: https://blog.csdn.net/The_cute_cat/article/details/144484155