https://ac.nowcoder.com/acm/contest/317#question
A. 小 a 的计算器 https://ac.nowcoder.com/acm/contest/317/A
题目描述
小 a 的数学基础实在太差了, 以至于他只会用计算器算数. 他的计算器比较特殊, 只有 +,?,*,/+,?,*,/(即加减乘除)四种运算.
经过一番周折, 小 a 终于算出了他想要的数, 但是他却忘记了最初的数是什么. 不过幸运的是他记下了整个操作序列, 他想请你帮他算出最初的数
输入描述:
第一行两个整数 n,Xn,X, 分别表示操作次数和最终的数
接下来 nn 行表示操作序列, 每行两个数 opt,xopt,x
若 opt=1opt=1, 则表示将当前数加 xx
若 opt=2opt=2, 则表示将当前数减 xx
若 opt=3opt=3, 则表示将当前数乘 xx
若 opt=4opt=4, 则表示将当前数除以 xx
输出描述:
一个整数表示最初的数
示例 1
输入
复制
4 6 1 3 2 1 3 3 4 2
输出
复制
2
说明
样例 1 解释
2+3=55?1=44?3=1212/2=62+3=55?1=44?3=1212/2=6
示例 2
输入
复制
3 292 3 2 4 3 4 3
输出
复制
1314
备注:
n?100,0<X?1018n?100,0<X?1018
数据保证:
1. 最初的数在进行操作时不会超过 long long 范围
2. 如果你的程序合法, 那么运算中所有的数均为整数, 所有的除法均为整除!
3. 不会出现整数被 0 除的情况
代码:
- #include <bits/stdc++.h>
- using namespace std;
- int N;
- long long K;
- int op[10010];
- long long num[10010];
- int main() {
- scanf("%d%lld", &N, &K);
- for(int i = 0; i <N; i ++)
- scanf("%d%d", &op[i], &num[i]);
- long long ans = K;
- for(int i = N - 1; i>= 0; i --) {
- if(op[i] == 1)
- ans -= num[i];
- else if(op[i] == 2)
- ans += num[i];
- else if(op[i] == 3)
- ans /= num[i];
- else ans *= num[i];
- }
- printf("%lld\n", ans);
- return 0;
- }
- View Code
B. 小 a 与 "204" https://ac.nowcoder.com/acm/contest/317/B
题目描述
小 a 非常喜欢 204204 这个数字, 因为′a′+′k′=204′a′+′k′=204.
现在他有一个长度为 nn 的序列, 其中只含有 2,0,42,0,4 这三种数字
设 aiai 为序列中第 ii 个数, 你需要重新排列这个数列, 使得∑ni=1(ai?ai?1)2∑i=1n(ai?ai?1)2 最大(公式的含义是: 每个数与前一个数差的平方的和)
注意: 我们默认
a
0
=0a0=0
输入描述:
第一行一个整数 nn
接下来一行 nn 个整数, 第 ii 个数表示 aiai
输出描述:
输出一个整数, 表示∑ni=1(ai?ai?1)2∑i=1n(ai?ai?1)2 的最大值
示例 1
输入
复制
2 2 4
输出
复制
20
说明
样例 1 解释: 按 (4,2)(4,2) 排列是最优的, 此时 sum=(4?0)2+(2?4)2=20sum=(4?0)2+(2?4)2=20
示例 2
输入
复制
3 2 0 4
输出
复制
36
说明
样例 2 解释: 按 (4,0,2)(4,0,2) 排列是最优的, 此时 sum=(4?0)2+(0?4)2+(2?0)2=36sum=(4?0)2+(0?4)2+(2?0)2=36
示例 3
输入
复制
5 2 4 0 2 4
输出
复制
52
备注:
1?n?1051?n?105, 保证 aiai 为 2/0/42/0/4 中的数
代码:
- #include <bits/stdc++.h>
- using namespace std;
- const int maxn = 1e5 + 10;
- int N;
- int a[maxn];
- int main() {
- scanf("%d", &N);
- int sum = 0;
- int zero = 0, two = 0, four = 0;
- for(int i = 1; i <= N; i ++) {
- scanf("%d", &a[i]);
- if(a[i] == 0) zero ++;
- if(a[i] == 2) two ++;
- if(a[i] == 4) four ++;
- }
- int temp = 0;
- while(N --) {
- if(temp == 0) {
- if(four) {
- sum += (4 - temp) * (4 - temp);
- four --;
- temp = 4;
- } else if(two) {
- sum += (2 - temp) * (2 - temp);
- two --;
- temp = 2;
- } else if(zero) {
- sum += (0 - temp) * (0 - temp);
- zero --;
- temp = 0;
- }
- } else if(temp == 4) {
- if(zero) {
- sum += (0 - temp) * (0 - temp);
- zero --;
- temp = 0;
- } else if(two) {
- sum += (2 - temp) * (2 - temp);
- two --;
- temp = 2;
- } else if(four) {
- sum += (4 - temp) * (4 - temp);
- four --;
- temp = 4;
- }
- } else {
- if(zero) {
- sum += (0 - temp) * (0 - temp);
- zero --;
- temp = 0;
- } else if(four) {
- sum += (4 - temp) * (4 - temp);
- four --;
- temp = 4;
- } else if(two) {
- sum += (2 - temp) * (2 - temp);
- two --;
- temp = 2;
- }
- }
- }
- printf("%d\n", sum);
- return 0;
- }
- View Code
- FHFHFH
来源: http://www.bubuko.com/infodetail-2931021.html