算法学习记录:NC16622[NOIP2009]多项式输出

题目链接:

 https://ac.nowcoder.com/acm/problem/16622

解题思路:

这题有个在拓扑序上的直觉。(并不完全是拓扑学,只是一种感觉)
举个例子,每i项,都是有了符号,再有系数,最后指数,我们确定了前面输出什么才有后面的判断。
但并不完全是这样,该题当指数为0时,会影响系数的输出格式(x是否要输出),这里直接提高优先级。
也是为什么不完全是拓扑序的原因。

AC代码:

// 系数:1.开头,+ 不输出,- 输出
//		 2.中间,+,输出
//		 3.和次数有关
//			a.系数=1 且 >0次,则1无需输出
//		    b.系数=0,什么也不要输出
//			c.次数=0,次数直接输出
//
// 次数:1.次数>1:输出x^b
//			- 系数1,系数2,
//		2.次数=1:输出x
//      3.次数=0:系数可以x输出

#include <iostream>

using namespace std;

int main()
{	
	int n; cin >> n; // 项数:一共有n+1项
	

	for (int i = n; i >= 0; -- i)
	{
		int x; cin >> x;	

		if (x == 0) continue;

		if (i == n)		// 开头符号
		{
			if (x < 0) cout << '-';
		}
		else			// 中间符号
		{
			if (x > 0) cout << '+';
			else cout << '-';
		}
		
		// 系数
		if (abs(x) == 1 && i != 0) cout << 'x';
		else if (i == 0) cout << abs(x);
		else cout << abs(x) << 'x'; 
		
		// 次数
		if (i > 1) cout << '^' << i;
	}	
}	
posted @ 2023-05-18 20:51  想个昵称好难ABCD  阅读(29)  评论(0)    收藏  举报