(規律 思維)1770 數數字

2021-09-20 13:03:01 字數 1824 閱讀 7289

1 秒262,144 kb

20 分

3 級題

統計一下 aaa ⋯ aaan個a × baaa ⋯ aaa⏟n個a × b 的結果裡面有多少個數字d,a,b,d均為一位數。

樣例解釋:

3333333333*3=9999999999,裡面有10個9。

收起

多組測試資料。

第一行有乙個整數t,表示測試資料的數目。(1≤t≤5000)

接下來有t行,每一行表示一組測試資料,有4個整數a,b,d,n。 (1≤a,b≤9,0≤d≤9,1≤n≤10^9)

對於每一組資料,輸出乙個整數佔一行,表示答案。
2

3 3 9 10

3 3 0 10

10

0

題解:在紙上畫了畫,發現有些規律,想了想,大約9*9種情況;

我是這麼做的,先暴力求出前15位的情況,把 1 ~ 9 出現的次數都進行記錄,這樣我們只需要對 位數為15的和位數為14的,進行推導分析進行。

最後肯定是有一位數字在不斷地增加,還有個需要注意的地方,已知n和規律,怎麼求所要求數出現次數,這裡只分析最後不斷增加的數:

用 位數為15的找出那些不變化的個數(k),答案 = m - k

m :是最後的位數,當 a*b>=10 , m = n+1; 否則,m = n;

#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps (1e-8)

#define max 0x3f3f3f3f

#define u_max 1844674407370955161

#define l_max 9223372036854775807

#define i_max 2147483647

#define re register

#define pushup() tree[rt]=max(tree[rt<<1],tree[rt<<1|1])

#define nth(k,n) nth_element(a,a+k,a+n); // 將 第k大的放在k位

#define ko() for(int i=2;i<=n;i++) s=(s+k)%i // 約瑟夫

#define ok() v.erase(unique(v.begin(),v.end()),v.end()) // 排序,離散化

using namespace std;

inline int read()

while(c >= '0' & c <= '9') x = x * 10 + c - '0', c = getchar();

return x * f;

}typedef long long ll;

const double pi = atan(1.)*4.;

const int m=1e3+5;

const int n=5e6+5;

struct funf[20];

int main()

}if(n<=15)

if(!f[15].num[d])

if(f[15].num[d]==f[14].num[d])

else

ll sum=m-k;

printf("%lld\n",sum);}}

return 0;

}

51nod1770 數數字 規律

1770 數數字 基準時間限制 1 秒 空間限制 262144 kb 分值 20 難度 3級演算法題 統計一下 aa a aa a n個 a b 的結果裡面有多少個數字d,a,b,d均為一位數。樣例解釋 3333333333 3 9999999999,裡面有10個9。input 多組測試資料。第一行...

51nod 1770數數字(找規律)

統計一下 aaa aaa n個a b 的結果裡面有多少個數字d,a,b,d均為一位數。樣例解釋 3333333333 3 9999999999,裡面有10個9。input 多組測試資料。第一行有乙個整數t,表示測試資料的數目。1 t 5000 接下來有t行,每一行表示一組測試資料,有4個整數a,b,...

51nod 1770 數數字 模擬 思維

統計一下 aa a aa a n個 a b 的結果裡面有多少個數字d,a,b,d均為一位數。樣例解釋 3333333333 3 9999999999,裡面有10個9。input 多組測試資料。第一行有乙個整數t,表示測試資料的數目。1 t 5000 接下來有t行,每一行表示一組測試資料,有4個整數a...