[英]can we assign product of 2 int values to unsigned long long int
厨师是国家厨师王国的新国王。 作为首要和最重要的责任,他想重建切夫兰的道路系统。 全国有 N(1 到 N)个城市,每个城市 i 都有一个人口 Pi。 厨师想建造一些连接不同城市的双向道路,这样每个城市都可以连接到其他每个城市(通过直接道路或通过其他中间城市),并且从任何城市开始,人们都可以通过这些城市访问该国的所有其他城市道路。 在两个城市 u 和 v 之间修建道路的成本是 Pu x Pv。 建造道路系统的成本是每条将要建造的道路的成本总和。
帮助 King Chef 找到在 Chefland 建造新的道路系统以使每个城市相互连接的最低成本。
给定约束 1 ≤ T ≤ 10 1 ≤ N ≤ 105 1 ≤ Pi ≤ 106
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
int p[n];
for(int i=0;i<n;i++)
{
cin>>p[i];
}
sort(p,p+n);
unsigned long long int cost=0;
for(int i=1;i<n;i++)
{
cost+=p[i]*p[0];
}
cout<<cost<<endl;
}
}
// the above one is not accepted
but below one is accepted
#include <bits/stdc++.h>
using namespace std;
int main() {
int T ;
cin>>T ;
while(T--)
{
long long int N ;
cin>>N ;
vector<long long int> v ;
while(N--)
{
long long int x ;
cin>>x ;
v.push_back(x);
}
long long int cost=0 ;
sort(v.begin() , v.end());
for (int i=1 ; i<v.size() ; i++)
{
cost+=v[i]*v[0];
}
cout<<cost<<endl ;
}
return 0;
}
假设您的问题是如何安全地将两个int
值相乘并将结果存储在long long
中:
在 C++ 中,算术表达式的类型由操作数的类型决定。 例如,如果您使用a
和b
为 32 位整数 ( int
) 编写a * b
,则结果也将是int
,即使稍后您将其转换为long long
。 这显然会导致溢出。 为了获得真正的 64 位结果,您需要将 arguments 之一转换为 64 位 integer ( long long
):
int a, b;
long long c;
// WRONG: c = a * b;
c = static_cast<long long>(a) * b;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.