这题把我整蒙了,不愧是3k大佬出的啊·
  • 板块P3406 海底高铁
  • 楼主Ruan_ji
  • 当前回复11
  • 已保存回复11
  • 发布时间2022/7/31 18:54
  • 上次更新2023/10/27 17:35:31
查看原帖
这题把我整蒙了,不愧是3k大佬出的啊·
405146
Ruan_ji楼主2022/7/31 18:54

这是六十分 代码

#include <iostream>
#include <cstdio>
#include <cmath>
#define MAXN 100005
using namespace std;
long long n, m;
long long p[MAXN], sum[MAXN];
struct str {
	int a, b, c;
};
str number[MAXN];
int answer = 0;

int main () {
	cin >> n >> m;
	for (int i = 1;i <= m; ++i) {
		cin >> p[i];
	}
	for (int i = 1;i <= n - 1; ++i) {
		cin >> number[i].a >> number[i].b >> number[i].c;
	}
	for (int i = 1;i <= m - 1; ++i) {
		int a = p[i];
		int b = p[i + 1];
		if (p[i] > p[i + 1]) {
			a = p[i + 1];
			b = p[i];
		}
		if (b == n) {
			sum[a] += 1;
		}
		else {
			sum[a] += 1;
			sum[b] -= 1;
		}
	}
	int Q = 0;
	for (int i = 1;i <= n - 1; ++i) {
		Q += sum[i];
		sum[i] = Q;
	}
    for (int i = 1;i <= n - 1; ++i) {
		int buy = number[i].c + ( number[i].b * sum[i] );
		int Nbuy = number[i].a * sum[i];
        answer += min (buy, Nbuy);
	}
	cout << answer << endl;
	return 0;
}

这是100分代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#define MAXN 100005
using namespace std;
unsigned long long n, m;
unsigned long long p[MAXN], sum[MAXN];
struct str {
	unsigned long long a, b, c;
};
str number[MAXN];
unsigned long long answer = 0;

int main () {
	cin >> n >> m;
	for (unsigned long long i = 1;i <= m; ++i) {
		cin >> p[i];
	}
	for (unsigned long long i = 1;i <= n - 1; ++i) {
		cin >> number[i].a >> number[i].b >> number[i].c;
	}
	for (unsigned long long i = 1;i <= m - 1; ++i) {
		unsigned long long a = p[i];
		unsigned long long b = p[i + 1];
		if (p[i] > p[i + 1]) {
			a = p[i + 1];
			b = p[i];
		}
		if (b == n) {
			sum[a] += 1;
		}
		else {
			sum[a] += 1;
			sum[b] -= 1;
		}
	}
	unsigned long long Q = 0;
	for (unsigned long long i = 1;i <= n - 1; ++i) {
		Q += sum[i];
		sum[i] = Q;
	}
    for (int i = 1;i <= n - 1; ++i) {
		unsigned long long buy = number[i].c + ( number[i].b * sum[i] );
		unsigned long long Nbuy = number[i].a * sum[i];
        answer += min (buy, Nbuy);
	}
	cout << answer << endl;
	return 0;
}

而且60分的代码是WA四个点。

就把所有int改为 unsigned long long,就就就过啦?现在瘫在电脑前,MB中。。。

大哥,有必要吗(doge)

2022/7/31 18:54
加载中...