QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#634239#9450. Balloon Robotucup-team3564#AC ✓108ms28468kbC++143.0kb2024-10-12 16:55:562024-10-12 16:55:56

Judging History

你现在查看的是测评时间为 2024-10-12 16:55:56 的历史记录

  • [2024-10-14 16:43:05]
  • 自动重测本题所有获得100分的提交记录
  • 测评结果:AC
  • 用时:110ms
  • 内存:26660kb
  • [2024-10-14 16:40:52]
  • hack成功,自动添加数据
  • (/hack/990)
  • [2024-10-12 16:55:56]
  • 评测
  • 测评结果:100
  • 用时:108ms
  • 内存:28468kb
  • [2024-10-12 16:55:56]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
long long T,a,b,c,d[1000001],v[1000001],o,h[1000001],fa[1000001],q,w,e,an,cn,fac[1000001],inv[1000001],st[1000001],u[1000001];
char s[1000001];
struct p{long long q,w;}l[1000001];
long long pow_(long long qq,long long ww){long long ee=1;while(ww){if(ww&1) ee*=qq,ee%=mod;qq*=qq,qq%=mod,ww>>=1;}return ee%mod;}
inline int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}return x*f;}
void add(long long qq,long long ww){l[++o].q=ww,l[o].w=h[qq],h[qq]=o;}
long long gcd(long long qq,long long ww){return !ww?qq:gcd(ww,qq%ww);}
long long find(long long qq){return qq==fa[qq]?qq:fa[qq]=find(fa[qq]);}
void merge(long long qq,long long ww){long long f1=find(qq),f2=find(ww);if(f1==f2) return;fa[f1]=f2;}
long long C(long long qq,long long ww){return fac[qq]*inv[ww]%mod*inv[qq-ww]%mod;}
map<vector<int>,long long> vi,ve;
int dfs(long long qq,long long ww,long long ee)
{
	vector<int> tmp;
	for(int i=1;i<=ee;i++) tmp.push_back(h[i]);
	if(vi[tmp])
	{
		return ve[tmp];
	}vi[tmp]=1;
	for(int i=1;i<=ee-2;i++)
	{
		if(h[i]==h[i+1]&&h[i+1]==h[i+2])
		{
			cn=0;
			for(int j=1;j<i;j++) st[++cn]=h[j];
			for(int j=i+3;j<=ee;j++) st[++cn]=h[j];
			for(int j=1;j<=cn;j++) h[j]=st[j];
			long long yy=dfs(qq+1,ww,ee-3);
			ve[tmp]=max(ve[tmp],yy+1);
			for(int j=0;j<tmp.size();j++) h[j+1]=tmp[j];
		}
	}
	for(int i=1;i<=ee-1;i++)
	{
		if(h[i]==h[i+1])
		{
			cn=0;
			for(int j=1;j<i;j++) st[++cn]=h[j];
			for(int j=i+2;j<=ee;j++) st[++cn]=h[j];
			for(int j=1;j<=cn;j++) h[j]=st[j];
			long long yy=dfs(qq+1,ww,ee-2);
			ve[tmp]=max(ve[tmp],yy);
			for(int j=0;j<tmp.size();j++) h[j+1]=tmp[j];
		}
	}
	for(int i=1;i<=ee;i++)
	{
		cn=0;
		for(int j=1;j<i;j++) st[++cn]=h[j];
		for(int j=i+1;j<=ee;j++) st[++cn]=h[j];
		for(int j=1;j<=cn;j++) h[j]=st[j];
		long long yy=dfs(qq+1,ww,ee-1);
		ve[tmp]=max(ve[tmp],yy);
		for(int j=0;j<tmp.size();j++) h[j+1]=tmp[j];
	}
	return ve[tmp];
}
mt19937 rnd(time(0));
int main()
{
//	freopen("1.in","r",stdin);
	srand((unsigned)(time(0)^(*new int)));
	fac[0]=1;for(int i=1;i<=1000000;i++) fac[i]=fac[i-1]*i%mod;
	inv[1000000]=pow_(fac[1000000],mod-2);for(int i=999999;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
	T=1;
	scanf("%lld",&T);
	for(int ii=1;ii<=T;ii++)
	{
		scanf("%lld%lld%lld",&a,&b,&c);
		for(int i=1;i<=a;i++)
		{
			scanf("%lld",&d[i]);
		}cn=0;an=1e15;
		long long ann=0;
		for(int i=1;i<=c;i++)
		{
			scanf("%lld%lld",&q,&w);
			long long h1=w/b;
			w-=h1*b;
			long long hh=d[q]-w;
			if(hh<=0) hh+=b;
			st[++cn]=hh;
//			d[q]-w-K>=0 ->d[q]-w-K
//			d[q]-w-K<0 -> d[q]-w-K+b
		}
		sort(st+1,st+cn+1);
		st[0]=1,st[cn+1]=b;
		long long smm=0;
		for(int i=1;i<=cn;i++) smm+=st[i];
		an=min(an,smm-cn);
		for(int i=1;i<=cn+1;i++)
		{
			an=min(an,smm-cn*st[i]+b*(i-1));
			smm-=st[i];smm+=st[i];
		}
		printf("%lld\n",an);
	}
	return 0;
}

这程序好像有点Bug,我给组数据试试?

詳細信息

Test #1:

score: 100
Accepted
time: 8ms
memory: 26700kb

input:

4
2 3 3
1 2
1 1
2 1
1 4
2 3 5
1 2
1 1
2 1
1 2
1 3
1 4
3 7 5
3 5 7
1 5
2 1
3 3
1 5
2 5
2 100 2
1 51
1 500
2 1000

output:

1
4
5
50

result:

ok 4 lines

Test #2:

score: 0
Accepted
time: 108ms
memory: 28468kb

input:

1004
22 9426 26
1165 5248 8331 9055 1161 7381 2188 7489 5131 8434 2166 3981 6302 7188 4858 856 7797 9129 7839 1676 25 9053
20 6
22 68
12 16
11 63
17 49
5 10
21 68
17 80
18 18
10 28
15 55
14 80
1 45
21 67
5 74
13 4
3 34
7 80
9 95
5 52
8 31
2 53
7 22
5 99
20 66
12 2
33 9526 92
558 7460 280 7952 5186 9...

output:

94067
360219
223074
30971
171844
312753
0
158169
294738
291604
115632
59327
221328
287851
30518
337118
181724
249419
66367
10347
208411
180496
287130
40736
264604
278208
33792
191523
111583
31867
21143
232153
149868
191831
238832
63626
258936
133059
105618
237774
53942
342921
275883
110295
149350
20...

result:

ok 1004 lines

Extra Test:

score: 0
Extra Test Passed