Advertisement
Malinovsky239

Task A (9.05.11)

May 9th, 2011
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <string>
  4. #include <cstdlib>
  5.  
  6. #define N int(1e4 + 5)
  7.  
  8. using namespace std;
  9.  
  10. string s;
  11.  
  12. void fail()
  13. {
  14.     cout << "IMPOSSIBLE";
  15.     exit(0);
  16. }
  17.  
  18. int a[N];
  19.  
  20. int main()
  21. {
  22.     freopen("divide.in", "r", stdin);
  23.     freopen("divide.out", "w", stdout);
  24.  
  25.     int n, k, l, m;
  26.     cin >> n >> k >> l >> m;
  27.     cin >> s;
  28.  
  29.     for (int i = 0; i < s.size(); i++)
  30.         a[i] = int(s[i] - '0');
  31.  
  32.     int sum = 0;
  33.  
  34.     if (l >= k)
  35.     {
  36.         for (int i = 0; i < k; i++)
  37.             sum += a[i];
  38.  
  39.         if (sum % m)
  40.             fail();
  41.  
  42.         for (int i = k; i < l; i++)
  43.         {
  44.             sum -= a[i - k];
  45.             sum += a[i];
  46.  
  47.             if (sum % m)
  48.                 fail();        
  49.         }      
  50.     }
  51.     else if (l)
  52.     {      
  53.         for (int i = 0; i < l; i++)
  54.             sum += a[i];
  55.  
  56.         for (int i = k - 1; i >= l; i--)
  57.         {
  58.             bool ok = false;
  59.  
  60.             for (int dig = 0; dig < 9; dig++)
  61.             {
  62.                 if ((sum + dig) % m == 0)
  63.                 {
  64.                     a[i] = dig;
  65.                     sum += dig;
  66.                     ok = true;
  67.                     break;
  68.                 }              
  69.             }
  70.  
  71.             if (!ok)
  72.             {
  73.                 sum += 9;
  74.                 a[i] = 9;
  75.             }
  76.         }
  77.  
  78.         if (sum % m)
  79.             fail();
  80.     }
  81.     else
  82.     {
  83.         l++;
  84.         for (a[0] = 1; a[0] < 10; a[0]++)
  85.         {
  86.             sum = 0;
  87.             for (int i = 0; i < l; i++)
  88.                 sum += a[i];
  89.  
  90.             for (int i = k - 1; i >= l; i--)
  91.             {
  92.                 bool ok = false;
  93.  
  94.                 for (int dig = 0; dig < 9; dig++)
  95.                 {
  96.                     if ((sum + dig) % m == 0)
  97.                     {
  98.                         a[i] = dig;
  99.                         sum += dig;
  100.                         ok = true;
  101.                         break;
  102.                     }              
  103.                 }
  104.  
  105.                 if (!ok)
  106.                 {
  107.                     sum += 9;
  108.                     a[i] = 9;
  109.                 }
  110.             }
  111.  
  112.             if (sum % m == 0)
  113.                 break;
  114.         }
  115.  
  116.         if (sum % m)
  117.             fail();
  118.     }
  119.  
  120.     for (int i = max(l, k); i < n; i++)
  121.     {
  122.         sum -= a[i - k];
  123.         for (int dig = 0; dig < 10; dig++)
  124.         {
  125.             if ((sum + dig) % m == 0)
  126.             {
  127.                 a[i] = dig;
  128.                 sum += dig;
  129.                 break;
  130.             }
  131.         }
  132.     }
  133.  
  134.     for (int i = 0; i < n; i++)
  135.         cout << a[i];
  136.  
  137.     return 0;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement