懒得打字的yzj丢了道简单的数学题。 ⌊a⌋ +⌈b⌉+c(四舍五入)+d^n; (d^n表示d的n次方)。 解释一下 就是a向下取整 b向上取整 c四舍五入的和加上d的n次方
输入
第一行3个数 a,b,c。0<a,b,c<1e18, 第二行一个数q 表示q次查询 q<=2e5 每次查询2个整数 d,n。 0<d,n<1e18;
输出
每次查询输出一个答案(取模1e12);
样例输入
1.9 2.1 2.2 1 2 2
样例输出
10
爆longlong三种处理方式
1.__int128 此类型只能在Linux上编译,本地编译不了,但可ac
2.将1e12的数分开乘
快速版本: 乘法优化成两部分: 大于1e6以及小于1e6的分开 p=1e6; (((x*(y/p))%mod)*p)%mod+(x*(y%p))%mod;
龟速版本: 化成对应二进制一位一位的乘(此题tle)
ll ans = 0; while(b) { if(b & 1) ans = (ans + a ) ; if(ans>mod) ans%=mod; b >>= 1; a<<=1; if(a>mod) a%=mod; }3.转化成long double(最强)
简化: (x*y-(ll)((long double)x*y/mod)*mod+mod)%mod; #include<bits/stdc++.h> #define fi first #define se second #define log2(a) log(n)/log(2) #define show(a) cout<<a<<endl; #define show2(a,b) cout<<a<<" "<<b<<endl; #define show3(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl; #define tim printf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC); using namespace std; typedef long long ll; typedef pair<ll, ll> P; typedef pair<P, ll> LP; const ll inf = 0x3f3f3f3f; const int N = 1e5; const ll mod = 1e12; const ll p=1e6; const int base=131; const double pi=acos(-1); ll mul(ll x,ll y) { return (x*y-(ll)((long double)x*y/mod)*mod+mod)%mod; } ll ksm(ll a, ll b) { ll res = 1; ll base = a%mod; while(b) { if(b & 1) res = mul(res, base) ; base = mul(base, base) ; b >>= 1; } return res; } int main() { long double a,b,c; scanf("%Lf%Lf%Lf",&a,&b,&c); ll x=ceil(a),y=floor(b),z=(ll)(c+0.5); int t; scanf("%d",&t); ll res=x+y+z; if(res>mod) res%=mod; ll p,q; while(t--) { scanf("%lld%lld",&p,&q); ll ans=res+ksm(p,q); if(ans>mod) ans%=mod; printf("%lld\n",ans); } }