求助RE
  • 板块学术版
  • 楼主zrt090604
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/11/23 19:59
  • 上次更新2023/10/27 01:47:46
查看原帖
求助RE
459188
zrt090604楼主2022/11/23 19:59

P7116打的暴力,为什么RE了

#include <bits/stdc++.h>
using namespace std;
int n, k, sum[500005][11], w[21], s[21], a[21], mx[21], mn[21], pos[21], pos2[21], mod = 1e9 + 7;
long long ans;
void dfs(int p) {
    printf("%d\n", p);
	if(p > k) {
		for(int i = 1;i < p;++i) printf("%d ", a[i]);
		puts("");
		int xi = 1e9, po;
		for(int i = 1;i <= k;++i) {
		    printf("%d\n", i);
			if(mx[i] && (abs(w[i]-a[i])/mx[i])<xi || (abs(w[i]-a[i])/mx[i])==xi && pos[i]<po) xi = abs(w[i]-a[i])/mx[i], po = pos[i];
			if(mn[i] && abs(a[i]/mn[i])<xi || (abs(a[i]/mn[i])==xi) && pos2[i]<po) xi = abs(a[i]/mn[i]), po = pos2[i];
		}
		if(xi == 1e9) {
			bool flag = false;
			for(int i = 1;i <= k;++i)
				if(a[i]+mx[i]<1 || a[i]+mx[i]>w[i]) {flag = true; break;}
			if(!flag) puts("-1"), exit(0);
		}
		ans = (ans + xi*n + po) % mod;
		printf("%d %d %d\n", xi*n, po, ans);
		return;
	}
	for(int i = 1;i <= w[p];++i) a[p] = i, dfs(p+1);
}
int main() {
    scanf("%d%d", &n, &k);
    for(int i = 1;i <= k;++i) scanf("%d", w+i);
    for(int i = 1, x;i <= n;++i) {
    	scanf("%d%d", &x, s+i);
    	sum[i][x] = sum[i-1][x] + s[i];
    	if(sum[i][x]>mx[x] && sum[i][x]>0) mx[x] = sum[i][x], pos[x] = i;
    	if(sum[i][x]<mn[x] && sum[i][x]<0) mn[x] = sum[i][x], pos2[x] = i;
    	for(int j = 1;j <= k;++j)
    		if(j != x) sum[i][j] = sum[i-1][j];
    }
    // for(int i = 1;i <= n;++i) {
    	// printf("%d: ", i);
    	// for(int j = 1;j <= k;++j)
    		// printf("%d ", sum[i][j]);
    	// puts("");
    // }
	 for(int i = 1;i <= k;++i) printf("%d %d\n", mx[i], pos[i]);
	 for(int i = 1;i <= k;++i) printf("%d %d\n", mn[i], pos2[i]);
	dfs(1);
	printf("%lld\n", ans%mod);
	return 0;
}

2022/11/23 19:59
加载中...