Cod sursa(job #1382475)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 9 martie 2015 08:47:18
Problema Progresie Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.29 kb
#include <stdio.h>
int put[9900];
int r;
int min(int a,int b)
{
    if(a<b) return a;
    return b;
}
int exist(int a)
{
    int s=1,e=9855,mij,minim=10001,pos=0;
    while(s<=e)
    {
               mij=(s+e)/2;
               if(put[mij]>=a) 
               {
                               minim=min(put[mij]-a,minim);
                               pos=mij;
                               e=mij-1;
               }
               else s=mij+1;
    }
    minim+=a;
    if(minim-pos+1<=a) return 1;
    return 0;
}
int ver(int nr,int cate)
{
    if(cate==0) return 0;
    if(exist(nr)==1) return ver(nr+r,cate-1);
}
int main()
{
    freopen ("progresie.in","r",stdin);
    freopen ("progresie.out","w",stdout);
    for(int i=1;i<=9855;i++) put[i]=i*i;
    int n;    
    int t;
    scanf("%d",&t);
    for(int xy=0;xy<t;xy++)
    {
    bool as=0;
    scanf("%d%d",&n,&r);
    for(int i=1;i<=9855;i++)
    {
            for(int j=put[i]-i+1;j<=put[i];j++)
            {
                    if(ver(j+r,n-1)==0)
                    {
                                       as=1;
                                       printf("%d\n",j);
                                       break;
                    }
            }
            if(as==1) break;
    }
    }
}