今天看代码时发现一句 ans += yes[i] * 1LL * (yes[i] – 1) / 2; 其中用了1LL。LL其实代表long long, * 1LL是为了在计算时,把int类型的变量转化为long long,然后再赋值给long long类型的变量。代码中有这一行,long long ans = 0;
ans是long long类型的,ans += yes[i] * 1LL * (yes[i] – 1) / 2;
不至于后面计算溢出,* 1LL之后类型就转换为long long, yes内容是定义为int类型的。
在进行类型转换的时候,在其他类型的数字后面乘以一个1LL,就可以避免强制转换时候的精度问题。
举个例子:
Distance
链接:https://ac.nowcoder.com/acm/problem/14268
来源:牛客网
FST作为小朋友,经常会遇到和距离有关的问题,但是他已经厌倦了曼哈顿距离和欧几里德距离,所以FST就定义了一种FST距离。
这种距离并不用于空间或平面中,而运用于FST发明的一些神奇的算法中(唔… …)。
设i号元素的特征值为Ai,则i和j的FST距离是 |i2 – j2|+|Ai2 – Aj2|。
为了实现某新的数据结构,FST想在一大堆元素中找出距离最大的一对元素,他不关心是哪一对元素,只想求出最大距离。
牛客上的一道题,思路很好想,就是分成四种情况,将绝对值打开之后发现只有两种情况,讨论一下即可。这道题不是重点,重点是我WA了一发还完全不知道是因为什么。后来突然想到可能是存在精度问题,在式子中唯一一个不是ll类型的变量后面乘以一个1LL,他就A了,就是这么神奇,不相信的你可以把1LL删掉去试试。
#include <cstdio>
#include <cstring>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <cmath>
#include <algorithm>
#include<bits/stdc++.h>
using namespace std;
const double N = 1e6+10;
const double pi = acos(-1.0);
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;
const inline int read(){
int k = 0, f = 1; char c = getchar();
for(;!isdigit(c); c = getchar())
if(c == '-') f = -1;
for(;isdigit(c); c = getchar())
k = k * 10 + c - '0';
return k * f;
}
#define ll long long
#define CL(a,b) memset(a,b,sizeof(a))
#define MAXN 100010
long long int a[MAXN];
long long int b[MAXN];
long long int c[MAXN];
int main()
{
int t;
cin >> t;
for(int i = 1 ; i <= t ; i++)
{
scanf("%lld",&a[i]);
}
for(int i = 1 ; i <= t ; i++)
{
b[i] = 1LL*i*i+a[i]*a[i];
c[i] = a[i]*a[i]-1LL*i*i;
}
sort(b+1,b+1+t);
sort(c+1,c+1+t);
long long int res = abs(b[t]-b[1]);
if(res < abs(c[t]-c[1]))
res = abs(c[t]-c[1]);
printf("%lld\n",res);
return 0;
}
今天的文章1h10ll是什么意思_will not用法[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/78389.html