AcWing 4736. 步行者
原题链接
简单
作者:
notknow
,
2023-07-17 00:41:28
,
所有人可见
,
阅读 155
//注意输入格式,处理的格式
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int T;
cin>>T;
for(int count=1;count<=T;count++)//使用for循环来执行T次,便于后面答案的输出
{
int M,N,P;//M表示参赛者的人数,N表示参赛的天数,P表示约翰的号数
cin>>M>>N>>P;
//将数据存入一个二维数组
int num[1010][1010];
//第M行第N个,将数据一个个存入一个二维数组
for(int i=1;i<=M;i++)//存入的数据从1开始才方便
for(int j=1;j<=N;j++)
cin>>num[i][j];
//关键在于找到同一天中的最大值,与约翰的相减,存入数组res
int res[N+1]; //其数据范围就用天数N加一来表示,因为是从1开始的
//找到同一天的最大值
//天数先固定,按参赛者一个个扫过去,找到同一天的最大值
//注意这里双重循环的下标的问题
for(int i=1;i<=N;i++)
{
int max=0;//作为中间量进行比较
for(int j=1;j<=M;j++)
{
if(num[j][i]>max)max=num[j][i];//如此之后,最大值将存入max
}
res[i]=max-num[P][i];//同一天中最多的步数减掉约翰走的步数
//若结果小于等于零,则约翰是当天的冠军
}
//将总共要走的额外步数算出来
int sum=0;//记录答案
for(int i=1;i<=N;i++)
if(res[i]>0)//大于零表示当前天约翰不为冠军,则需要更多的步数
sum=res[i]+sum;
printf("Case #%d: %d\n",count,sum);
}
}
本代码时间在1000左右,有时会tle,cin改成scanf运行时间在250左右,就很容易过
为方便省事,就使用了cin和cout,全用print和scanf会快很多