2014年1月17日 星期五

Codeforces Round #224 (Div. 2) B - Number Busters


#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
long long int is[5005]={0},arr[5005]={0};
int main(){
    long long int a,b,w,x,c,add=0,k,len,i=0,pre,j,p,num,now;
    scanf("%lld%lld%lld%lld%lld",&a,&b,&w,&x,&c);
    memset(is,-1,sizeof(is));
    is[b]=0;
    k=c-a;

    while(1){
        if(c<=a) break;
        add++;//printf("%d*",b);
        if(b>=x) b=b-x,k--,i++;
        else b=w-(x-b);
        arr[add]=i;
        if(is[b]!=-1){
            now=add;
            pre=is[b];
            len=arr[now]-arr[pre];
            num=now-pre;
            p=(k-len)/len;//printf("%d...%d....%d....",k,len,p);
            add+=p*num;
            k-=len*p;
            while(1)
            for(j=pre+1;j<=now;j++){
                k-=arr[j]-arr[j-1];
                add++;
                if(k==0) goto go;
            }
            go:;
            break;
        }
        is[b]=add;
        if(k==0) break;
    }
    //for(i=0;i<10;i++)
    //    printf("%d ",arr[i]);
    //puts("");
    printf("%lld\n",add);
}

沒有留言:

張貼留言