离奇的":"求调
查看原帖
离奇的":"求调
357440
NullNone楼主2023/10/31 16:48

https://www.luogu.com.cn/record/132606750

#3提示 Wrong Answer.wrong output format Expected integer, but ":" found

#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
const int MAXN = 55, MAXM = 4005;
inline void readint(int &var){
	char reg;
	do{ reg = getchar(); }while(reg < '0' || reg > '9');
	do{
		var = (var << 1) + (var << 3) + (reg ^ 48);
		reg = getchar();
	}while('0' <= reg && reg <= '9');
}
void writeint(int val){
	if(val <= 10)
		putchar(val ^ 48);
	else{
		writeint(val / 10);
		putchar((val % 10) ^ 48);
	}
}
struct Node{
	int a, b, c;
	inline void read(){ readint(a); readint(b); readint(c); }
}ns[MAXM];
int n, m, dp[MAXN][MAXN][MAXM], v, suf[MAXN][MAXN][MAXM], lis[MAXM], ll, cnt[MAXM], nps[MAXM], nval;
int spli[MAXN][MAXN][MAXM], sufi[MAXN][MAXN][MAXM], ansl[MAXN];
vector<int>ps;
map<int, int>np;
void rev(int lt, int rt, int minval){
	if(lt > rt)
		return;
	int rmx = sufi[lt][rt][minval];
	int mid = spli[lt][rt][rmx];
	if(!mid){
		for(int i = lt; i <= rt; ++i)
			ansl[i] = 500000;
		return;
	}
	ansl[mid] = nps[rmx];
	rev(lt, mid - 1, rmx);
	rev(mid + 1, rt, rmx);
}
int main(){
	ios::sync_with_stdio(false);
	readint(n); readint(m);
	for(int i = 0; i < m; ++i){
		ns[i].read();
		ps.push_back(ns[i].c);
	}
	sort(ps.begin(), ps.end());
	ps.erase(unique(ps.begin(), ps.end()), ps.end());
	v = ps.size();
	for(int i = 0; i < v; ++i)
		nps[i] = ps[i];
	for(int i = 0; i < v; ++i)
		np[nps[i]] = i;
	for(int i = 0; i < m; ++i)
		ns[i].c = np[ns[i].c];
	for(int i = 0; i < n; ++i)
		for(int l = 1, r = i + 1; r <= n; ++l, ++r){
			ll = 0;
			for(int j = 0; j < m; ++j)
				if(l <= ns[j].a && ns[j].b <= r)
					lis[ll++] = j;
			for(int j = l; j <= r; ++j){
				for(int k = 0; k < v; ++k)
					cnt[k] = 0;
				for(int k = 0; k < ll; ++k)
					if(ns[lis[k]].a <= j && ns[lis[k]].b >= j)
						++cnt[ns[lis[k]].c];
				for(int k = v - 2; k >= 0; --k)
					cnt[k] += cnt[k + 1];
				for(int k = 0; k < v; ++k){
					nval = suf[l][j - 1][k] + suf[j + 1][r][k] + cnt[k] * nps[k];
					if(nval > dp[l][r][k]){
						dp[l][r][k] = nval;
						spli[l][r][k] = j;
					}
				}
			}
			for(int j = v - 1; j >= 0; --j){
				if(dp[l][r][j] < suf[l][r][j + 1]){
					suf[l][r][j] = suf[l][r][j + 1];
					sufi[l][r][j] = sufi[l][r][j + 1];
				}else{
					suf[l][r][j] = dp[l][r][j];
					sufi[l][r][j] = j;
				}
			}
		}
	writeint(suf[1][n][0]);
	putchar('\n');
	rev(1, n, 0);
	for(int i = 1; i <= n; ++i){
		writeint(ansl[i]);
		putchar(' ');
	}
	putchar('\n');
	fflush(stdout);
	return 0;
}
2023/10/31 16:48
加载中...