(80分)为啥数组必须是long long
查看原帖
(80分)为啥数组必须是long long
510914
RodneyYang楼主2021/12/21 15:25

代码如下,题目说ci最大10的9次方,且我代码中没有对数组赋入更大的值,为啥int不行,而必须改成long long呢?谢谢各位大神。

#include<bits/stdc++.h>
using namespace std;
const int SIZE = 1e5+5;
const long long INF = 1e20;
long long road[SIZE];//这里不变成long long,最后5个点过不去 
int main()
{
	int n;
	int m;
	int p1;//s1天降到的兵营 
	long long s1;//s1个天降工兵数 
	long long s2;//我手里的兵数 
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>road[i];
	} 
	cin>>m>>p1>>s1>>s2;
	long long  long_tol=0,hu_tol=0;
	int pox=-1;
	for(int i=1;i<m;i++)
	{
		long_tol+=road[i]*(m-i);
	}
	for(int i=m+1;i<=n;i++)
	{
		hu_tol+=road[i]*(i-m);
	}

	if(p1>m)
	{
		hu_tol+=s1*(p1-m);
	}
	if(p1<m)
	{
		long_tol+=s1*(m-p1);
	}

	long long  min=INF;
	if(hu_tol<long_tol)
	{
		for(int i=m;i<=n;i++)
		{
			
			long long  tmp = abs((hu_tol+s2*(i-m))-long_tol);
			if(tmp<min)
			{
				min = tmp;
				pox = i;
			} 
		}
	}
	else if(hu_tol>long_tol)
	{
		for(int i=1;i<=m;i++)
		{
					
			long long  tmp = abs((long_tol+s2*(m-i))-hu_tol);
			if(tmp<min)
			{
				min = tmp;
				pox = i;
			} 
		}
	}
	else
	{
		pox=m;	
	}
	cout<<pox;
	return 0;
}



2021/12/21 15:25
加载中...