专栏文章

题解:P1061 [NOIP2006 普及组] Jam 的计数法

P1061题解参与者 6已保存评论 6

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
6 条
当前快照
1 份
快照标识符
@miqikrg3
此快照首次捕获于
2025/12/04 05:23
3 个月前
此快照最后确认于
2025/12/04 05:23
3 个月前
查看原文

题解:P1061 [NOIP2006 普及组] Jam 的计数法

前言

本蒟蒻的第一篇题解,求过。

思路

一道简单的模拟题。
每次 +1+1 时,从右往左扫描:
  • 如果这一位无需进位,则让这一位 +1+1,并且让后面的每一位都变为它左边的一位 +1+1,输出结果;
  • 若每一位都需要进位,则说明已经是最后一个 Jam 数字,立刻停止程序。

代码

CPP
#include <bits/stdc++.h>
using namespace std;
int s, t, w;
string jam;
int main()
{
	cin >> s >> t >> w >> jam;
	for (int i = 1; i <= 5; i++) // 最多加 5 次 1
	{
		bool flag = true; // 记录能不能加 1
		for (int j = w - 1; j; j--) // 从右往左扫描
		{
			if (jam[j] - 'a' + 1 <= j - w + t) // 如果这一位无需进位
			{ // 注意在 Jam 数字中第 j 位只能达到 j - w + t
				jam[j]++;
				for (int k = j + 1; k < w; k++)
				{
					jam[k] = jam[k - 1] + 1;
				}
				cout << jam << endl;
				flag = false; // 能加 1
				break;
			}
		}
		if (flag) // 不能加 1
		{
			break;
		}
	}
	return 0;
}

评论

6 条评论,欢迎与作者交流。

正在加载评论...