【質問解】CSP-Cake(リニアテーブル)


トピックリンク

アルゴリズムのアイデア

ケーキをトラバースして、この人用か次の人用かを判断します。判断基準は、この人の手にあるケーキの量がkに達したかどうかです。達すると、次の人に渡されます。
注意最後のケーキは、現在の人にあげても次の人にあげても、まだ数えていない人が一人いるので、忘れずに数えてください。
複数のレビューの質問、複数のレビューの質問。

コードの説明

上記の注意点は、私が書いたwhileループのifの2つのブランチの観点からも考慮することができ
ます。1。最初のブランチを入力します。明らかに、ansに変更はなく、現在の人を含める必要があります。
2. 2番目のブランチに入ると、このケーキを次の人に渡しました。次の人を無視しないように注意してください。

#include<iostream>
using namespace std;

int n = 0, k = 0, a = 0;
int cake = 0, ans = 0;// cake 当前朋友得到的蛋糕量,ans 分到了蛋糕的朋友数量
//注意,可能最后一个朋友没有得到满足,但还是分到了蛋糕
int main()
{
	scanf("%d%d", &n, &k);
	while (n--)
	{
		scanf("%d", &a);//蛋糕 a_i
		if (cake < k)
		{
			cake += a;
		}
		else
		{
			ans++; //这位朋友满足了
			cake = a;
			//啊,蛋糕差点玩掉了
		}
	}
	//所以最后一个人无论如何得算进去
	ans++;
	printf("%d", ans);
	return 0;
}

結果分析

スコアは100ポイント、所要時間は0ミリ秒(速すぎる、システムが応答しない)、2.531MBのスペースを使用します。

おすすめ

転載: blog.csdn.net/weixin_44092088/article/details/109899998