QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#462539#1253. Abstract Circular CoverZSH_ZSHWA 17686ms12400kbC++141.9kb2024-07-03 20:40:002024-07-03 20:40:02

Judging History

你现在查看的是最新测评结果

  • [2024-07-03 20:40:02]
  • 评测
  • 测评结果:WA
  • 用时:17686ms
  • 内存:12400kb
  • [2024-07-03 20:40:00]
  • 提交

answer

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
#define rep(i,a,b) for (int i=(a);i<=(b);i++)
#define drep(i,a,b) for (int i=(a);i>=(b);i--)
using namespace std;
typedef long long ll;

const int inf=1e9;
inline bool chkmin(int &x,int y)
{
	return (x>y?x=y,1:0);
}

mt19937 rng(3068863558);
inline int rnd(int l,int r){return l+(rng()%(r-l+1));}

int main()
{
	clock_t clk=clock();
	ios::sync_with_stdio(false); cin.tie(0);

	int n; cin>>n;
	// int n=850;
	vector<vector<int> > a(n,vector<int>(n));
	rep(i,0,n-1) rep(j,0,n-1) cin>>a[i][j];
	// rep(i,0,n-1) rep(j,0,n-1) a[i][j]=rnd(1,100000);

	auto norm=[&](int x){return (x+100*n)%n;};

	vector<int> freq(n);
	vector<int> ans(n+1,inf);
	vector<int> mx(n);
	vector<vector<int> > f(n,vector<int>(n+1,inf));
	vector<vector<int> > pre(n,vector<int>(n+1,-1));

	auto solve=[&](int st,int top)
	{
		if (mx[st]>top) return;
		mx[st]=top;

		rep(i,0,n-1) rep(j,0,top) f[i][j]=inf;
		rep(i,0,n-1)
		{
			f[i][1]=a[norm(st)][i];
			pre[i][1]=-1;
			if (i!=n-1)
			{
				rep(j,1,top-1) if (f[i][j]<inf)
				{
					rep(k,i+1,n-1)
					{
						if (chkmin(f[k][j+1],f[i][j]+a[norm(st+i+1)][k-(i+1)]))
						{
							pre[k][j+1]=i;
						}
					}
				}
			}
		}

		rep(i,1,top)
		{
			int now=n-1;
			drep(j,i,1)
			{
				freq[norm(now+1)]++;
				now=pre[now][j];
			}
			chkmin(ans[i],f[n-1][i]);
		}
	};

	vector<int> ord(n);
	rep(i,0,n-1) ord[i]=i;

	drep(k,n,1)
	{
		if (k!=n&&((n/k)==(n/(k+1)))&&rnd(0,40)!=0) continue;
		rep(i,0,n-1) freq[i]=0;
		shuffle(ord.begin(),ord.end(),rng);
		int t=min(n,n/k/30+2);
		rep(i,0,t-1) solve(ord[i],k);
		cerr<<k<<"\n";

		// sort(ord.begin(),ord.end(),[&](auto x,auto y){return freq[x]>freq[y];});
		// rep(i,0,t-1) solve(ord[i],k);
	}

	rep(i,1,n) printf("%d ",ans[i]);
	printf("\n");

	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3792kb

input:

3
10 12 23
7 4 11
8 5 3

output:

3 12 25 

result:

ok 3 tokens

Test #2:

score: 0
Accepted
time: 1ms
memory: 4096kb

input:

1
15

output:

15 

result:

ok "15"

Test #3:

score: -100
Wrong Answer
time: 17686ms
memory: 12400kb

input:

850
467844 492130 605609 643857 26979 997775 457911 823516 154840 985025 993710 334965 480280 45505 851380 765414 512285 661374 745909 563360 878563 887945 542943 288759 124012 159576 828454 705380 24125 806150 695873 109057 933855 632721 259819 784272 398751 935451 393059 788917 560334 786155 54986...

output:

3778 2224 5634 6370 5867 10516 8445 11322 22257 25758 29686 36603 43777 37503 42305 54915 55969 74889 75170 96572 108980 118941 131680 143190 159544 172374 192023 199700 216054 236664 249640 263857 282365 298719 319329 332305 346522 367087 401391 418048 432265 452830 486603 507925 541698 567714 6011...

result:

wrong answer 1st words differ - expected: '260', found: '3778'