当前位置:网站首页>踩水坑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;
}
边栏推荐
猜你喜欢
随机推荐
【RISC-V】risc-v架构学习笔记(架构初学)
A brief introduction to the SSM framework
Redis Sentinel原理
搭建frp进行内网穿透
JSP session的生命周期简介说明
matlab常用符号用法总结
loadrunner-controller-view script与load generator
[NLP] Interpretation of Transformer Theory
JSP application对象简介说明
混合型界面:对话式UI的未来
来n遍剑指--09. 用两个栈实现队列
loadrunner-Controller负载测试-各模块功能记录01测试场景设计
如何在 TiDB Cloud 上使用 Databricks 进行数据分析 | TiDB Cloud 使用指南
postgresql 范围查询比索引查询快吗?
作为面试官,关于线程池的问题我一般这样套路...
Spark 在 Yarn 上运行 Spark 应用程序
loadrunner录制问题
UE4插件软链接(关联)
Progressive Web App(PWA)
多版本node的安装与切换详细操作









