1. 程式人生 > >牛客寒假算法基礎集訓營1

牛客寒假算法基礎集訓營1

++ http sum family 想要 scribe board 但是 ase

https://ac.nowcoder.com/acm/contest/317#question

A.小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"

題目描述

小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最大(公式的含義是:每個數與前一個數差的平方的和)
註意:我們默認a0=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

牛客寒假算法基礎集訓營1