UVa11805 - Bafana Bafana (水題)

題目大意

一個足球隊要訓練傳球,球員圍成一個圓圈且球員的傳球方式是傳給左手邊的隊友,也就是 1 傳給 2 傳給 3 已此類推,教練一開始會把球傳給 k 球員,想詢問傳了 p 次後球會在那個隊員腳上?

分析

英文很難…XD,這很痛苦wwww。這句英文特難啊,就讓我放在這邊來讓未來的我緬懷現在英文不好的我www。

英文翻譯

In each pass, a player will give the ball to his partner who is in his immediate right side.

在每一次的傳球,一個球員將傳給他的夥伴並且他的夥伴是在右手邊收到球。

看到了嘛!!!!! 他的語句是被動型態,且是以收球者觀點為主,在華人社會很少會這樣講,直接習慣性以踢球者為主的角度去看,讓我以為她踢球是讓球員遞減,隊友 3 傳給隊友 2 傳給隊友 1,這種感覺..。

基本上這題不難,只需要將 \((現在的球員號碼 + 傳 x 次) % 隊員數量\) 即可,注意是當餘數為 0 時要特別改成 n 即可。因為模數的特姓,在球員號碼等同於隊員數量時上面公式會輸出 0,因此特別拉出來寫案例即可。

觀念重點

  • \((現在的球員號碼 + 傳 x 次) % 隊員數量\)
  • 當上面的公式值為 0 時將改成輸出隊員數量

參考來源

  • 齊笎詳解

心得

這題不難拉,只需要解決英文問題就好了,最近都在訓練數學題目順便增強英文閱讀能力,最近覺得英文閱讀能力有變好,算是一大感動嘛XD

題目程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <bits/stdc++.h>
#define LOCAL
#define int long long
using namespace std;
int t , n , k , p ;
int kase ;

int compute(){
int temp = (k + p) % n ;
if(temp == 0 )
return n ;
return temp ;
}

int32_t main()
{
#ifdef LOCAL
freopen("in1.txt" , "r" , stdin );
#endif // LOCAL

cin >> t ;
while(t--){
cin >> n >> k >> p ;
cout << "Case " << ++kase << ": " << compute() << '\n' ;
}

return 0;
}
  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2024 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: