比赛描述
贲神陪基友看电影被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); } }