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);
}
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言