南邮 OJ 1922 HUMA的惩罚

HUMA的惩罚

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 65            测试通过 : 15 

比赛描述

    贲神陪基友看电影被HUMA发现了,为了惩罚男友,HUMA丢给贲神一项繁重的任务:定义f(x)=(x+a)/b,给出一个数x,将它用f(x)迭代n次(即计算f(f(f(…f(x)))))的结果。为了防止贲神作弊,HUMA要求每次f(t)的结果要进行向下取整运算后才能进行下一次迭代。那么问题来了,________?



输入

第一行为一个正整数T,表示有T组数据

每组数据为4个正整数:n,x,a,b (0<n,x,a<0^18,0<b<100)

输出

每组输出一个整数m,表示经过n次迭代后取整的结果(计算结果对1000000007取模)

样例输入

3
1 1 2 3
2 1 2 3
2 5 2 3

样例输出

1
1
1

题目来源

LYD





/* Time Limit Exceed at Test 1

#include<iostream>
using namespace std;

#define MOD 1000000007

int main(){
	__int64 t,n,x,a,b;
	scanf("%I64d",&t);
	while(t--){
		scanf("%I64d%I64d%I64d%I64d",&n,&x,&a,&b);
		while(n--){
			x = (x+a)%MOD/b;
		}
		printf("%I64d\n",x);
	}
}
*/

#include<iostream>
using namespace std;

#define MOD 1000000007

int main(){
	__int64 t,n,x,a,b,lastX;
	scanf("%I64d",&t);
	while(t--){
		scanf("%I64d%I64d%I64d%I64d",&n,&x,&a,&b);
		lastX = x;
		while(n--){
			x = (x+a)/b;
			if(x==lastX){
				break;
			}
			lastX = x;
		}
		printf("%I64d\n",x%MOD);
	}
}


你可能感兴趣的:(ACM,南邮OJ,HUMA的惩罚)