UVa11723 - Numbering Roads! (水題)

題目大意

有一個國家的道路命名方式是這樣的,透過數字 0-9 與字母 A-Z,數字配上一個字母(也可以不配)來當作一個道路的命名,類似舊高雄市XD。
給你需要命名的道路數量,可用數字為 3,告訴我們可不可以全部命名成功,且輸出可以用到最少的字母,也就是只需要用到第幾個字母就命名完全道路,如果不行請輸出 impossible。

舉例,道路有 5 條,可用數字為 2
那道路就有 1,2,1a,2a,1b,2b ,因此就輸出 2,因為用到 b

分析

這題很簡單XD,我們只要把不一定要配上字母的命名也當作是一種字母,也就表示總共有 27 個字母可以使用,之後再讓道路數量除以可命名數字在減一就會是答案了XD。

觀念重點

  • 由於 C++ 的除法是無條件輸入法,但在這裡我們需要的是無條件進位法,因為我們只要用到字母輸出就需要 +1,因此我們的做法是讓 (道路數量 + 可用命名數量 -1 ) / 可用命名數量,就可以達到無條件進位了! -1 是防止 (2+2) / 2 = 2 的產生,因為道路數量只有 2,因此才需要將可用命名數量 -1

心得

這題也是簡單 KO,這題的腦筋急轉彎比較少,我就順利通關,太開心了YA,小有成就感www。

題目程式碼

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
#include <iostream>
#include <bits/stdc++.h>
#define LOCAL
#define N 27
#define int long long
using namespace std;
int r , n , kase , cnt ;

void compute(){
cnt = (r + n-1) / n ;
cout << "Case " << ++kase << ": ";
if(cnt > 27 )
cout <<"impossible\n" ;
else
cout << cnt-1 << '\n' ;
}

int32_t main()
{
#ifdef LOCAL
freopen("in1.txt" , "r" , stdin );
freopen("out.txt" , "w" , stdout);
#endif // LOCAL
while(cin >> r >> n && r+n != 0 ){
compute();
}
return 0;
}
  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2024 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: