[ad_1]
我遇到了这个问题:
农夫约翰的奶牛非常喜欢吃甜食,它们特别喜欢吃拐杖糖! FJ 总共有 N 头牛,每头牛都有一定的初始高度,他想给它们喂 M 根拐杖糖,每根拐杖糖的高度也不同 (1≤N,M≤2⋅10^5)。
FJ 计划按照输入中的顺序将拐杖糖一根一根喂给奶牛。 为了给他的奶牛喂拐杖糖,他会将拐杖糖悬挂起来,以便最初拐杖糖刚好接触地面。 然后,奶牛将按照输入给出的顺序一一排成一排,然后走到拐杖糖处,每只都吃到它们的高度(因为它们无法到达更高的高度)。 即使奶牛吃掉了拐杖糖的底部,拐杖糖仍保持悬挂在最初设置的位置,并且不会降低到地面。 如果拐杖糖的底部已经高于牛的高度,那么牛在轮到她时可能什么也不吃。 每头牛吃完后,它们的身高都会根据它们吃掉的拐杖糖数量而增长,农夫约翰挂起下一根拐杖糖,奶牛们再次重复这个过程(奶牛 1 再次成为第一个开始吃拐杖糖的人)。下一个拐杖糖)。 特别提示:拐杖糖漂浮在空中,例如当一头高度为 2 的牛到达高度为 3 的拐杖糖时,它会吃掉 2 个单位(1 和 2),以及拐杖糖的第 3 个单位仍然漂浮在空中,因此只有高度≥2的牛才能到达并吃掉它。
输入格式(管道标准输入):
第一行包含 N 和 M。
下一行包含 Ncows 的初始高度,每个高度都在范围内 [1,10^9]。
下一行包含 M 根拐杖糖的高度,每个都在范围内 [1,10^9]。
输出格式(管道标准输出):
N 头牛每头的最终高度位于不同的线上。
请注意,此问题涉及的大尺寸整数可能需要使用 64 位整数数据类型(例如,C/C++ 中的“long long”)。
样本输入:
3 2
3 2 5
6 1
样本输出:
7
2
7 说明:
第一个拐杖糖有 6 个单位高。
1. 第一头牛吃掉第一根拐杖糖的部分直到高度 3,之后第一根拐杖糖的剩余部分占据高度 [3,6]。
2. 第二头牛不够高,无法吃掉第一根拐杖糖的剩余部分。
3. 第三头牛又吃了两单位第一根拐杖糖。 第一个拐杖糖的剩余部分,占据高度 [5,6],没有被吃掉。
接下来,每头牛的生长量取决于她吃的量,因此牛的身高变为 [3+3,2+0,5+2]=[6,2,7]。
第二根拐杖糖有 1 个单位高,第一头牛把它全部吃掉了。
评分:
* 输入2-10:N,M≤10^3
* 输入 11-14:无附加约束。
这是我的 C++ 答案:
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ ll n,m; cin>>n>>m; ll heightcow[n]; for(int i=1;i<=n;i++){ cin>>heightcow[i]; } ll finalcow[n]; for(ll i=1;i<=n;i++){ finalcow[i]=heightcow[i]; } ll heightcane[m]; for(ll i=1;i<=m;i++){ cin>>heightcane[i]; } for(ll j=1;j<=m;j++){//cane bool statcane[m]; for(ll i=1;i<=heightcane[j];i++){ statcane[i]=true; } for(ll i=1;i<=n;i++){//cow for(ll k=1;k<=heightcow[i];k++){ if(statcane[k]==true){ statcane[k]=false; finalcow[i]++; } } } } for(ll i=1;i<=n;i++){ cout<<finalcow[i]<<endl; } return 0; }
我尝试过的:
我不知道该怎么办,我是一个初学者。 请帮忙!
解决方案1
关于代码,您首先注意到的是切片超出了数组的末尾:
ll heightcow[n] = { 3, 2, 5 }; ll heightcane[m] = { 6, 1 }; ll finalcow[n]; for (ll i = 1; i <= n; i++) { finalcow[i] = heightcow[i]; }
数组总是从 0 开始,到 n-1 结束。
[ad_2]
コメント