Loading [MathJax]/jax/output/HTML-CSS/fonts/TeX/fontdata.js

المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:مرحله ی سوم:دوره ی ۲۰:سوال ۲

شماره تلفن رند

یک شماره تلفن ۷ رقمی را رند می‌گوییم اگر بتوان ارقام آن را به صورت 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;
}

ابزار صفحه