牛客:黑龙江农垦科技职业学院喜迎寒假多校联赛2(快乐ak场)
C 题 gg查成绩
题目:
思路 :
输入就不用说了,关键是输出的判断,要求是 第x位 同学和 第y位 同学之间 所有的同学的成绩总和 ,如果每次输出 都遍历数组的话 会超时 !!( 错了十次才改思路 …)
所以我就在每次输入的时候把a [ 1 ] 到 a [ n ] 所有值存放在 s里面 ;
然后一个数组 b [ n ] 来存放前 n 位 a [ n ] 的和 ,我在前面先用了 s ,在后面 存放 b数组时 ,用 for循环倒着相减 (可能我觉得这样省时间吧 嘿嘿嘿 )
输出的时候只需要用 b [ y ] - b [ x ] 就行了
( 可能有人问为什么是 b [ y ] - b [ x ] ,因为我这次用数组 每个 第 0 位 都是没有使用,所以输入第几位就是第几位);
因为要先输入所有数据 ,所以我就用了 p数组 来存放 每次 b [ y ] - b [ x ] 的值 ;
最后再用一个for循环按顺序输出 p数组 里面的数据就行了。
代码:
#include <bits/stdc++.h>
using namespace std;
int a[1000005];
int b[1000005];
int p[1000005];
int main()
{
long n,m,s=0;
int x,y,t;
int i,j,k;
scanf("%ld%ld",&n,&m);
for(i=1; i<=n; i++)
{
scanf("%d",&a[i]);
s=s+a[i]; //用s存放a数组数据的总和
}
b[n]=s; //所有的 数组 第0位 都没有被使用,用 b [ n ] 存总和
for(i=n; i>0; i--)
{
b[i-1]=b[i]-a[i]; // 倒着相减 ,依次将 前 a [ n ] 项和存进 b [ n ] 数组 里面
}
for(i=1; i<=m; i++)
{
scanf("%d%d",&x,&y);
p[i]=b[y]-b[x-1]; // 用 p 数组 存放每次 a[ x ] 到 a [ y ] 的和
}
for(i=1; i<=m; i++)
printf("%d\n",p[i]); //按顺序 输出就完事了
}
还有个J题 ( 签到题 )
就硬写 ,不用管 写它就完事了!!!
题目 :
思路:
要求很简单 ,就是输入一组数据( 秒数 ),然后找出 最快的( 最小的数字 ) 是哪一个 ;
如果时间相同 ,谁先说出 ( 就是最先输入且数字最小的 ),就是谁 ,输出他的位置就行了;
代码 :
#include <bits/stdc++.h>
using namespace std;
int a[10005];
int main()
{
int n,i,t,min=1000; // 让 min 等于最大边界就行或者等于你输入的第一个数据都一样
cin>>n;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]<min) // 每次输入的时候都和 min 比较 ,如果比 min 小的话 ,min 就等于这个数;
{ // 同时 用 t 来记住 min 的位置
min=a[i];
t=i+1 ;
}
}
cout<<t; // 最后 输出 min 的 位置 就行了
}
.
.
没了
没了
没了
比较菜 就写了俩题 。。。。。
对 我就去签个到… 没错,签到就完事了!!
拜了拜
.
.
.