HDU5429大数模板
发布时间:2020-12-14 02:21:27 所属栏目:大数据 来源:网络整理
导读:这题直接套大数模板就行了,我硬是要写一发double试试,结果果断WA了n多发,最后还没过。 也许是我修为太浅,不能找到double的正确AC姿势。而且发现一般这种题基本上都是考大数的,用double基本上过不了,除了一些特殊的题目。 #includecstdio#includeiostre
这题直接套大数模板就行了,我硬是要写一发double试试,结果果断WA了n多发,最后还没过。 也许是我修为太浅,不能找到double的正确AC姿势。而且发现一般这种题基本上都是考大数的,用double基本上过不了,除了一些特殊的题目。 #include<cstdio> #include<iostream> #include<vector> #include<queue> #include<algorithm> #include<string> #include<cstdlib> #include<map> #include<set> #include<cmath> #include<cstring> #include<cctype> #include<climits> using namespace std; #define LL long long #define INT (1<<31)-1;//2147483647 const int maxn=1000; struct bign { int len,s[maxn]; bign() { memset(s,sizeof(s)); len=1; } bign operator =(const char* num) { len=strlen(num); for(int i=0;i<len;i++) s[i]=num[len-i-1]-'0'; return *this; } bign operator = (int num) { char s[maxn]; sprintf(s,"%d",num); // cout<<"GG"<<endl; *this=s; return *this; } bign(int num) { *this=num; } bign(const char* num) { *this=num; } string str() const { string res=""; for(int i=0;i<len;i++) res=(char)(s[i]+'0')+res; if(res=="") res="0"; return res; } bign operator + (const bign &b)const { bign c; c.len=0; for(int i=0,g=0;g||i<max(len,b.len);i++) { int x=g; if(i<len) x+=s[i]; if(i<b.len) x+=b.s[i]; c.s[c.len++]=x%10; g=x/10; } return c; } bign operator += (const bign &b) { *this=*this+b; return *this; } bign operator * (const bign &b) const { bign c; int flag=0; if(b.s[b.len-1]==0||s[len-1]==0) flag=1; for(int i=0;i<b.len;i++) { bign temp; temp.len=i; for(int j=0,g=0;g||j<len;j++) { int x=g; if(j<len) x=x+s[j]*b.s[i]; temp.s[temp.len++]=x%10; g=x/10; } c+=temp; } if(flag) c=0; return c; } bign operator - (const bign &b) const { bign c=0; c.len=0; for(int i=0,g=0;g||i<b.len;i++) { int temp=s[i]; temp+=g; if(temp>=b.s[i]) { c.s[c.len++]=temp-b.s[i]; g=0; } else { c.s[c.len++]=temp+10-b.s[i]; g=-1; } } return c; } bign operator /(const int &b) const { bign c; c.len=0; LL temp=0; int num[maxn]; int llen=0; memset(num,sizeof(num)); int i=len-1; while(i>=0) { temp=temp*10+s[i]; if(temp>=b) break; i--; } temp=(temp-s[i])/10; for(;i>=0;i--) { temp=temp*10+s[i]; if(temp>=b) { num[llen++]=temp/b; temp=temp%b; } else { num[llen++]=0; } } for(int i=0;i<llen;i++) c.len=llen; for(int i=0;i<llen;i++) c.s[i]=num[llen-i-1]; return c; } bool operator < (const bign &b) const { if(len!=b.len) return len<b.len; for(int i=len-1;i>=0;i--) if(s[i]!=b.s[i]) return s[i]<b.s[i]; return 0; } bool operator >(const bign &b) const { return b<*this; } bool operator >=(const bign &b) const { return !(*this<b); } bool operator == (const bign &b) const { return !(*this<b)&&!(b<*this); } bool operator != (const bign &b) const { return !(*this==b); } void clean() { while(len>0&&s[len-1]==0) len--; } }; istream &operator >> (istream &in,bign &x) { string s; in>>s; x=s.c_str(); return in; } ostream &operator << (ostream &out,const bign &x) { out<<x.str(); return out; } int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); //getchar(); bign a[110]; int c=0; for(int i=0;i<n;i++) { cin>>a[i]; a[i].clean(); if(a[i].len==0) c++; } int flag=1; for(int i=1;i<n-1;i++) { bign x,y; x=a[i]*a[i]; y=a[i-1]*a[i+1]; // cout<<x<<' '<<y<<endl; if(x!=y) { flag=0; break; } } // printf("%d",c); if(c&&c!=n) flag=0; if(flag) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |