乙個p進製的n位數a,將a的最後一位放到最高位得到新的n位數b,如果滿足b = 2 * a(p進製下),那麼稱a為p進製下的雙倍數。現給出進製p,求該進製下的最小雙倍數m。
共k行,每行乙個整數pi,表示進製為pi。
共k行,每行乙個對應pi進製下最小的雙倍數mi,mi的每一位用乙個空格隔開。
235
0 111 23
資料組數n ≤ 200進製數p ≤ 200
0可以做最高位(如樣例中2的最小雙倍數),但不能只有0。思路1:對於進製n,每一位用0 ~ n - 1表示。
對於每乙個mi,列舉位數,得到的第乙個滿足條件的數即使最小的p進製下的雙倍數。思路2:
對於對於進製pi下的mi,列舉最後1位,列舉p次即可。得到結果後需要與目前答案進行大小比較。特判:
有一類特殊情況我們可以直接輸出,就是進製數pi % 3 == 2時,最小雙倍數一定是(pi / 3) (pi / 3 * 2 + 1)。思路1:
//skq_liao
#include using namespace std;
#define for(i, a, b) for (register int i = (a), i##_end_ = (b); i < i##_end_; ++i)
#define rof(i, a, b) for (register int i = (a), i##_end_ = (b); i > i##_end_; --i)
#define debug(...) fprintf(stderr, __va_args__)
const int maxn = 20005;
int a[maxn];
void cal(int n)
for(int i = 2; ; ++i) // 列舉位數
for(j, 1, n) // 列舉最後一位
if(a[i] == a[1] * 2 + a[0])//如果滿足條件,輸出並結束搜尋
}}int main()
思路2://misakamikoto
#include using namespace std;
#define for(i, a, b) for (register int i = (a), i##_end_ = (b); i < i##_end_; ++i)
#define rof(i, a, b) for (register int i = (a), i##_end_ = (b); i > i##_end_; --i)
#define debug(...) fprintf(stderr, __va_args__)
const int maxn = 20005;
int p;
int ans[maxn];
inline bool check(int x, int y)
inline int solve(int x)
for(int pos = 2;; ++pos)
for(j, 1, x)
if(check(pos, carry))
return pos + 1;
}}int main()
return 0;
}
此題難度不大,核心在於如何想到雙倍數的構造方法。skq_liao 2017/06/25 10 : 15 於機房
雙倍數 題解
乙個p進製的n位數a,將a的最後一位放到最高位得到新的n位數b,如果滿足b 2 a p進製下 那麼稱a為p進製下的雙倍數。現給出進製p,求該進製下的最小雙倍數m。共k行,每行乙個整數pi,表示進製為pi。共k行,每行乙個對應pi進製下最小的雙倍數mi,mi的每一位用乙個空格隔開。2 350 1 11...
題解 最小公倍數計數
先考慮,sum x sum x ij gcd i,j le x 細節等會處理。sum sum sum i,j 1 其實這一步不用急著將其轉化為 mu 函式,有些時候形如 sum x gcd d,x 1 d 可以化成尤拉函式的形式。sum sum sum sum mu d sum sum mu d s...
Latex雙倍行距設定
elservier 上有的雜誌要求投稿必須是雙倍行距 type the whole manuscript with double line spacing laxtex文件中加上如下的語句就可以了.add at the beginning usepackage then switch between...