题意:用M分割平面能分几块
思路:推公式。这道题用java的大数模板超时了,后来就手打一个128位整数过了。
代码:
#include<iostream>
using namespace std;
#define ll long long
long long ml = 100000000;
struct node {
long long h;
long long l;
};
node multi(long long a,long long b){
long long ah,al,bh,bl,sum;
node a1,a2;
a1.h=0;
a1.l=0;
a2.h=0;
a2.l=0;
int tem=0;
ah = a/ml;
al = a%ml;
bh = b/ml;
bl = b%ml;
sum = al*bl;
tem = sum/ml;
a1.h = tem+ah*bl;
a1.l = sum%ml;
a2.h = bh*a;
a1.h+=a2.h;
a1.l+=a2.l;
return a1;
}
int main(){
ios::sync_with_stdio(false);
int t;
cin>>t;
for(int j=1;j<=t;j++)
{
ll n,num,tex;
node a;
a.l=0;
a.h=0;
ll i;
cin>>n;
i=n;
num = -7*n+1;
a = multi(8*n,n);
//cout<<a.h<<" "<<a.l<<endl;
tex = 100000*ml+a.l+num;
a.h = a.h-100000+tex/ml;
a.l = tex%ml;
if(a.h>0)
{
cout<<"Case #"<<j<<": "<<a.h;
ll r=a.l;
for(int i=0;i<8;i++)
{
if(r==0) cout<<0;
else r/=10;
}
cout<<a.l<<endl;
}
else
cout<<"Case #"<<j<<": "<<a.l<<endl;
}
}