1. 程式人生 > >Atcoder Beginner Contest 118 C-Monsters Battle Royale(貪心)

Atcoder Beginner Contest 118 C-Monsters Battle Royale(貪心)

play sca poi spl 一次 data- none tex code

題目鏈接

題意就是要讓給出的數字去互相取余,看看能得到最小的數事多少。

那麽就可以從小到大排序,每一次都貪心地把最小的數作為攻擊者,去攻擊其他的數字(也就是大的取余小的),然後再一次排序,循環這個過程,直到出現1或者數字只剩一個非0數。

代碼如下

技術分享圖片
 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 int a[(int)1e5 + 10];
 6 
 7 int main() {
 8     int n;
 9     scanf("%d", &n);
10     for
(int i = 0; i < n; i++) { 11 scanf("%d", &a[i]); 12 } 13 int begin = 0; 14 while (true) { 15 sort(a + begin, a + n); 16 while (a[begin] == 0) begin++; 17 if (begin == n - 1) break; 18 for (int i = begin + 1; i < n; i++) { 19 a[i] %= a[begin];
20 if (a[i] == 1) { 21 puts("1"); 22 return 0; 23 } 24 } 25 } 26 printf("%d\n", a[n-1]); 27 return 0; 28 }
View Code

Atcoder Beginner Contest 118 C-Monsters Battle Royale(貪心)