网站制作窍门,wordpress专题页,专业网站制作公司塞尼铁克,wordpress首页api幻灯片题目列表#xff1a;
#1多项式输出 #2龙虎斗 #3表达式求值 #4解密
#1多项式输出
这是第一个题目很简单#xff0c;我也作对了。
我们下来看一下题目#xff1a; 我们先来看一下样例#xff1a;
5
100 -1 1 -3 0 10
首先100是第一项#xff0c;所以不输出加号
#1多项式输出 #2龙虎斗 #3表达式求值 #4解密
#1多项式输出
这是第一个题目很简单我也作对了。
我们下来看一下题目 我们先来看一下样例
5
100 -1 1 -3 0 10
首先100是第一项所以不输出加号输出100x是未知数^5是次数题目中说了这是个自变量每次递减1. -1 为什么输出-x^4不输出1题目中说了1输出正号-1输出负号系为数0的项不输出。
所以这是模拟对吧。
这是不分步处理的
#include bits/stdc.h
using namespace std;
int main() {int n;cin n;int a[n1];for(int i : a) cin i;if(n 0)return couta[0],0;int flag0;for(int i 0;i n;i){if(a[i]!0)break;else flag;}if(flagn1)return cout0,0;for(int i n - 1,j 0; j n; i--,j){if(j 0 a[j] -1)cout-;else if(j 0 a[j] 1) ; else if(a[j] ! 0 j ! 0 abs(a[j]) ! 1 j ! n)cout(a[j] 0 ? : -)abs(a[j]); //非第一项else if(a[j] ! 0 j 0)couta[j]; //第一项else if (abs(a[j]) 1 j ! n) cout(a[j] 0 ? : -);if(a[j] 0) continue; //系数为0if(j n)cout(a[j] 0 ? : -)abs(a[j]);//先处理符号和系数if(j ! n) coutx; // 如果不是最后一项else continue; //如果是最后一项就不用输出次数//未知数if(j n-1) continue; //如果是倒数第2项也不用输出else cout^i1;}return 0;
}
看着就很恶心对吧。
我们再来看一下分布处理的
#includebits/stdc.h
using namespace std;
int main(){int n;cin n;for(int a,i n;i 0;i--){cina;if(a 0) continue; //多项式中只包含系数不为0的项if(a 0) cout -, a -a; //如果是负数else if(i n) cout; //不是第一项if(a 1 || i 0) couta; //i不是1也不是最后一项if(i 0) coutx; //不是最后一项输出未知数if(i 1) cout^i; //不是倒数第二个就不输出^和次数}return 0;
}
简洁吧。
#2龙虎斗 题目读起来 很费劲对吧。
这里可以去洛谷看一下。
我这里只讲题解了
#include bits/stdc.h
using namespace std;
using LL long long;
int main() {ios::sync_with_stdio(false), cin.tie(0);int n, m, p1, p2;LL s1, s2, sum 0;cin n; // 总数vectorLL C(n 1); // Ci: i号有C[i]名士兵for (int i 1; i n; i) cin C[i];cin m p1 s1 s2;C[p1] s1, p2 1; // s1个神兵天降突然出现在了p1号for (int i 1; i n; i) sum C[i] * (i - m); // 两边统一计算for (int i 1; i n; i) // p2选哪个?if (abs(sum s2 * (i - m)) abs(sum s2 * (p2 - m))) p2 i;return printf(%d\n, p2), 0;
}
#3表达式求值
第三道题了
一个很恶心的题 看着简单吧做一下你就疯狂了。
我试了一千种方法一种都没成功我就看了一下标程。
#include bits/stdc.h
using namespace std;
const int MOD 1e4;
int mul(stackint s) { // 栈上的所有数字相乘int a 1;while (!s.empty()) (a * s.top()) % MOD, s.pop();return a;
}
int main() {ios::sync_with_stdio(false), cin.tie(0);string e;cin e;stackint s;int n e.size(), x 0, ans 0;for (int i 0; i n; i) {char c e[i];if (!isdigit(c)) { // 数字结束了入栈s.push(x), x 0;if (c ) ans mul(s); // 遇到加法把栈里面的数字都乘起来} else(x x * 10 (c - 0)) % MOD; // 数字拼接}assert(x), s.push(x);(ans mul(s)) % MOD;printf(%d\n, ans);return 0;
}
用栈知道吧。栈就是FILO表说人话就是先进去的后出来。这里就是想象成被号分开的乘法算式。 #4解密
非初中人民不要看不然CPU就爆了。 就是一元二次方程。
#include bits/stdc.h
using namespace std;
using LL long long;
LL solve(LL n, LL e, LL d) {LL m n - e * d 2, r m * m - 4 * n;if (r 0) return -1;LL s sqrt(r);if (s * s ! r or (m - s) % 2) return -1;return (m - s) / 2;
}
int main() {ios::sync_with_stdio(false), cin.tie(0);int k;cin k;for (LL n, e, d; k--;) {cin n e d;LL p solve(n, e, d);if (p ! -1)printf(%lld %lld\n, p, n / p);elseputs(NO);}return 0;
}
纯数学题对吧。