// 19 points #include <bits/stdc++.h> using namespace std; int main(){ int k1, e1, first = 0; while(scanf("%d %d", &k1, &e1) != EOF){ int k2 = k1 * e1, e2 = e1 - 1; if(e2 >= 0) cout << (first ? " " : "") << k2 << " " << e2; else if(k2 == 0 && e2 == 0) cout << (first ? " " : "") << 0 << " " << 0; first++; } }
// 25 points #include <bits/stdc++.h> using namespace std; int main() { int c, e, first = 0; cin >> c >> e; if(!c || !e) cout << 0 << " " << 0; else cout << c * e << " " << e - 1; while(cin >> c >> e) { if(e != 0) cout << " " << c * e << " " << e - 1; } }
当时想的果然是 0 相关的问题,但不知道代码应该怎么表达。果然还是考虑的角度不够具体。
当时尝试测试了 1 0 和 0 1 ,发现代码没有任何输出的时候就觉得这部分有问题了。然后尝试改指数和系数中判断是否为 0 的部分,但是改成 || 对了本来错的测试点,却又让样例过不了了,改成 && 过了样例,又卡了两个测试点得了 19 分。想不通遂放弃。
参考了别人的思路,又看了看样例和上面的 1 0 0 1 特别是样例 -2 0 部分,感觉有点明白差别在哪里了。可以看到当存在多个多项式的时候,指数为 0 的情况是不输出的。
而如果只有一个多项式,并且得到的结果可能为 0 的时候,比如上面的 c 0 ,或者hi 0 e 的时候,那么你结果就需要表示出来而不能不输出了。
结合别人说的,当指数为 0 的时候,跟前面的系数撑起来就变成 0 了,但是如果前面还有其他多项式时候的情况,这个 0 是否表达并不重要,就像我们平时写 x^2 + 2x + 1 不会还会在后面多写一个 0 。但是如果对 C 常数求导的话,不能说什么也不写,因为其结果就是 0 你还得把他表达出来。
所以我们可以看到这两个关键在于,一个多项式以及多个多项式时 0 的不同的表达的情况。