TIOJ-1505

Assssss!!

https://tioj.ck.tp.edu.tw/problems/1505

Description

現在有一個正整數構成的除法數列

$
x_1 / x_2 / x_3 / \dots / x_n
$

請問是否有一種加上括號的方法使得最後運算的結果是整數?
$2 \leq n \leq 10^5, 1 \leq x_i \leq 10^9$

Solution

加上括號之後每個數字會被放到分母或分子,想當然而放在分子的數字越多越好
可以發現$x_2$會恰好被放到分母一次,因此在最後他一定是當分母的
而我們可以構造出一個方法讓除了$x_2$最後當分母以外,其他數字都當分子

$$
(x_1 / (((x_2 / x_3) / x_4) / x_5 \dots)) = \frac{x_1 x_3 x_4 x_5 \dots x_n}{x_2}
$$

由於$x_2$最後一定會待在分母,只要檢查其他數字的乘積是否可以被$x_2$整除就好了
記得 long long 的問題

AC code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cstdio>

inline char readchar() {
    constexpr int B = 1<<20;
    static char buf[B], *p, *q;
    if(p == q && (q=(p=buf)+fread(buf,1,B,stdin)) == buf) return EOF;
    return *p++;
}
inline int nextint() {
    int x = 0, c = readchar();
    while(c < '0') c = readchar();
    while(c >= '0') x=x*10+(c^'0'), c=readchar();
    return x;
}

signed main() {
    int t = nextint();
    while(t--) {
        int n = nextint();
        int res = nextint(), mod = nextint();
        for(int i = 2; i < n; i++) res = 1LL * res * nextint() % mod;
        puts(res ? "zzz..." : "Asssss!!");
    }
}
comments powered by Disqus