52分求助。。。不知道错哪里了
查看原帖
52分求助。。。不知道错哪里了
759274
Stevehim楼主2022/8/12 10:46
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
long long int p1, m, n, s1, s2 = 0;
long long int sumL, sumH;
long long int temp = 1000000000;
long long int te = 0;

int jisuan(int s, int p) {
	return s * abs(p - m);
}


int main() {
	//输入
	cin >> n;
	long long int a[n + 5];
	for ( int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	cin >> m >> p1 >> s1 >> s2;
	//计算初始气势
	///A计算
	for (int i = 1; i < m; i++) {
		sumL += a[i] * (m - i);
	}
	///B计算
	for (int i = n; i > m; i--) {
		sumH += a[i] * (i - m);
	}

//---------此处为自检模块----------
//	cout << "初始化完毕,当前龙的气势为:" << sumL << "  虎的气势为:"  << sumH << endl;
//---------此处为自检模块----------

	//计算增加的气势
	if (p1 < m) {
		sumL += jisuan(s1, p1);
	} else if (p1 > m) {
		sumH += jisuan(s1, p1);
	}

//---------此处为自检模块----------
//	cout << "计算增加气势完毕,当前龙的气势为:" << sumL << "  虎的气势为:"  << sumH << endl;
//---------此处为自检模块----------

	//判断气势大小并开始枚举
	if (sumL < sumH) {

		//-------此处为自检模块-------
//		cout << "虎大于龙" << endl;
		//-------此处为自检模块-------

		long long int tempad[100005];
		for (int i = 1; i < m; i++) {
			int ti = sumL + jisuan(s2, i);

			//---------此处为自检模块----------
//			cout << "当前为" << i << "号兵营,计算增加气势完毕,当前龙的气势为:" << ti << "  虎的气势为:"  << sumH <<
//			     "  虎减龙的气势为" << abs(
//			         sumH - ti) << endl;
			//---------此处为自检模块----------

			if (abs(sumH - ti) > temp) {

//				-------此处为自检模块-------
//				cout << "不是最小" << endl;
				//-------此处为自检模块-------

				continue;
			} else if (abs(sumH - ti) < temp) {

				//-------此处为自检模块-------
//				cout << "是最小,更新" << endl;
				//-------此处为自检模块-------

				temp = abs(sumH - ti);
				tempad[te] = i;
			}
		}
		cout << tempad[0];
	} else if (sumL > sumH) {

		//-------此处为自检模块-------
//		cout << "龙大于虎" << endl;
		//-------此处为自检模块-------

		long long int tempad[100005];
		te = 0;
		for (int i = n; i > m; i--) {
			int ti = sumH + jisuan(s2, i);

			//---------此处为自检模块----------
//			cout << "当前为 " << i << "号兵营,计算增加气势完毕,当前龙的气势为:" << ti << "  虎的气势为:"  << sumH <<
//			     "  虎减龙的气势为" << abs(
//			         sumH - ti) << endl;
			//---------此处为自检模块----------

			if (abs(sumL - ti) > temp) {

				//-------此处为自检模块-------
//				cout << "不是最小" << endl;
				//-------此处为自检模块-------

				continue;
			} else if (abs(sumL - ti) < temp) {

				//-------此处为自检模块-------
//				cout << "是最小,更新" << endl;
				//-------此处为自检模块-------

				temp = abs(sumL - ti);
				tempad[0] = i;
			}
		}
		cout << tempad[0];
	} else {
		cout << m;
	}

	return 0;
}

2022/8/12 10:46
加载中...