v 0. Pasted by slipstak2 as cpp at 2011-01-08 14:43:03 MSK and set expiration to never.

Paste will expire never.

  1. // Меньшиков. Тренировка 13.
  2. // 13E. Сумма произведений [prodsum]
  3. // O(N) по авторскому разбору
  4. // ibelyaev: 07Jan2011
  5.  
  6. #include <iostream>
  7. #include <cstdio>
  8. #include <cmath>
  9.  
  10. using namespace std;
  11.  
  12. int n,s;
  13. void input()
  14. {
  15.     cin>>n>>s;
  16. }
  17. int amount;
  18. double eps = 1e-9;
  19. void solve()
  20. {
  21.     // z = 0 amount
  22.     // p = +1 amount
  23.     // m = -1 amount
  24.     int p;
  25.     for (int z = 0; z<=n; z++)
  26.     {
  27.         int k = n - z;
  28.         int a = 4;
  29.         int b = -4*k;
  30.         int c = k*k - k - 2*s;
  31.  
  32.         int d = b*b - 4*a*c;
  33.         if (d<0) continue;
  34.  
  35.         int sqrtD = sqrt((double)d) + eps;
  36.        
  37.         if (sqrtD * sqrtD == d)
  38.         {
  39.             if ((-b + sqrtD) % (2*a) == 0){
  40.                 p = (- b + sqrtD) / (2*a);
  41.                 if (0<=p && z+p <= n){
  42.                     amount++;
  43.                     continue;
  44.                 }
  45.             }
  46.             if ((-b - sqrtD) % (2*a) == 0){
  47.                 p = (- b - sqrtD) / (2*a);
  48.                 if (0<=p && z+p <= n){
  49.                     amount++;
  50.                     continue;
  51.                 }               
  52.             }           
  53.         }
  54.     }
  55.     cout<<amount;
  56. }
  57. int main()
  58. {
  59.     freopen("input.txt","r",stdin);
  60.     freopen("output.txt","w",stdout);
  61.  
  62.     input();
  63.     solve();
  64.     return 0;
  65. }


Editing is locked.