当前位置:网站首页>踩水坑2 数据超出long long
踩水坑2 数据超出long long
2022-07-31 09:30:00 【繁水682】
不能想当然认为数据一定小于long long
一定要仔细判断数据范围!
一定要仔细判断数据范围!
一定要仔细判断数据范围!
如果不行了,就可以用赖皮方法,__int128(两个下划线)
__int128只能用于数据中间处理,不能用作输入输出。
用法:
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define pii pair<int,int>
#define pb push_back
#define rep(i,l,r) for (int i=l;i<=r;i++)
#define nep(i,r,l) for (int i=r;i>=l;i--)
#define CIO std::ios::sync_with_stdio(false)
using namespace std;
const int INF=0x3f3f3f3f;
const int N=2e6+5;
int aa[N];
int bb[N];
map<int,int> m;
void lg(int x){
int cnt=0;
while (x){
if (x&1) m[cnt+1]++;
x=x/2;
cnt++;
}
}
int ansz,ansm;
__int128 gcd(__int128 a,__int128 b){
if (b==0) return a;
return gcd(b,a%b);
}
int pre[40];
void work(){
int n;cin>>n;
int sum=0;
rep(i,1,n){
cin>>aa[i];
sum+=aa[i];
lg(aa[i]);
}
int SUM=sum;
pre[1]=1;
rep(i,2,30){
pre[i]=pre[i-1]*2;
}
rep(i,1,30){
rep(j,1,m[i]){
bb[j]+=pre[i];
}
}
__int128 ans=0;
__int128 zhuan=0;
rep(i,1,n){
zhuan=(bb[i]*n-SUM);
zhuan*=(bb[i]*n-SUM);
ans+=zhuan;
}
__int128 nn=n*n*n;
__int128 g=gcd(ans,nn);
int ans1=ans/g;
int ans2=(n*n*n)/g;
if (ans==0) cout<<"0/1";
else cout<<ans1<<"/"<<ans2;
}
signed main(){
CIO;
//int _;cin>>_;while(_--)
{
work();
}
return 0;
}
边栏推荐
猜你喜欢
随机推荐
Aleo Testnet3规划大纲
各位大佬,sqlserver 支持表名正则匹配吗
js radar chart statistical chart plugin
JSP pagecontext对象的简介说明
Mysql+Navicat for Mysql
多版本node的安装与切换详细操作
JSP application对象简介说明
剑指offer-解决面试题的思路
【节选】吴恩达给出的AI职业生涯规划
浏览器使用占比js雷达图
【TCP/IP】Network Model
内联元素居中
vue element form表单规则校验 点击提交后直接报数据库错误,没有显示错误信息
UE4插件软链接(关联)
【问题记录】TypeError: eval() arg 1 must be a string, bytes or code object
手写promise
MySQL 的几种碎片整理方案总结(解决delete大量数据后空间不释放的问题)
通过栗子来学习MySQL高级知识点(学习,复习,面试都可)
安装gnome-screenshot截图工具
[NLP] Interpretation of Transformer Theory