یک شماره تلفن ۷ رقمی را رند میگوییم اگر بتوان ارقام آن را به صورت abbbccc_ یا aaabccc_ یا aaabbbc_ یا aabbccc_ یا aabbbcc_ یا aaabbcc_ یا abababa_ نوشت که a، b و c ارقام یک رقمی نه لزوما متمایز هستند.
برای مثال شمارههای ۹۹۲۲۶۶۶ و ۳۳۳۰۳۳۳ و ۴۴۴۴۴۴۴ همگی رند هستند. ولی شمارههای ۹۲۲۳۳۲۲ و ۹۱۲۰۹۱۲ و ۱۲۳۴۳۲۱ هیچ یک رند نیستند.
تعداد شمارههای رندی که با صفر شروع نشوند و عدد ۷ رقمی متناظر آنها از ۷۸۰۱۳۸۹ کوچکتر باشد، چند تا است؟ اگر این تعداد را M بنامیم، باقیماندهی تقسیم M2 بر Δ چند است؟
پاسخ
#include <iostream> #include <set> using namespace std; typedef long long LL; const string paterns[] = {"abbbccc", "aaabccc", "aaabbbc", "aabbccc", "aabbbcc", "aaabbcc", "abababa"}; const int delta = 90907; int main() { int np = sizeof(paterns) / sizeof(paterns[1]); set<string> myset; int d[3]; for (d[0] = 0; d[0] <= 9; d[0]++) for (d[1] = 0; d[1] <= 9; d[1]++) for (d[2] = 0; d[2] <= 9; d[2]++) for (int k=0; k<np; k++) { string s = paterns[k]; for (int i=0; i<(int)s.length(); i++) s[i] = '0'+d[s[i]-'a']; if (s < "7801389" && s[0] != '0') myset.insert(s); } LL cnt = myset.size(); cout << (cnt*cnt) % delta << endl; return 0; }