过样例但是全WA,求Hack
查看原帖
过样例但是全WA,求Hack
1105993
Misserina楼主2025/7/6 13:21
#include <bits/stdc++.h>
using namespace std;
#define int long long
int t,k;
long long x,y,tmp,arr[35],dp[35][2];
bool iso[35];
signed main() {
	//freopen("sample.txt","r",stdin);
	//freopen("debug.txt","w",stdout);
	scanf("%lld",&t);
	while (t--) {
		scanf("%lld%lld%lld",&x,&y,&k);
		for (int i=0;i<=k;i++) {
			scanf("%lld",&tmp);
			for (int j=i;j<=k;j++) {
				if (i==0) arr[j]=tmp<<j;
				else {
					if (arr[j]>(tmp<<(j-i))) arr[j]=(tmp<<(j-i));
				}
			}
		}
		//for (int i=0;i<=k;i++) printf("%lld ",arr[i]);
		//printf("\n");
		if (x>y) swap(x,y);
		long long add=(y-x)%(1<<k),res=(y-x)/(1<<k)*arr[k];
		int p=0;
		for (int i=0;i<k;i++) iso[i]=add&(1<<i);
		//for (int i=0;i<k;i++) printf("%d ",iso[i]);
		//printf("\n%lld %lld\n",add,res);
		bool flag=0;
		for (int i=0;i<k;i++) {
			if (flag) {
				if (iso[i]) {
					dp[i][0]=dp[i-1][0]+arr[i];
					dp[i][1]=dp[i-1][1];
					if (dp[i][1]+arr[i+1]<dp[i][0]) dp[i][0]=dp[i][1]+arr[i+1];
					if (dp[i][0]+arr[i+1]<dp[i][1]) dp[i][1]=dp[i][0]+arr[i+1];
				}
				else {
					dp[i][0]=dp[i-1][0];
					dp[i][1]=dp[i-1][1]+arr[i];
					if (dp[i][1]+arr[i+1]<dp[i][0]) dp[i][0]=dp[i][1]+arr[i+1];
					if (dp[i][0]+arr[i+1]<dp[i][1]) dp[i][1]=dp[i][0]+arr[i+1];
				}
			}
			if (!flag && iso[i]) {
				flag=1;
				dp[i][0]=arr[i];
				dp[i][1]=arr[i];
			}
			//printf("%lld %lld\n",dp[i][0],dp[i][1]);
		}
		dp[k][0]=dp[k-1][0];
		if (dp[k-1][1]+arr[k]<dp[k][0]) dp[k][0]=dp[k-1][1]+arr[k];
		printf("%lld\n",dp[k][0]+res);
	}
}
2025/7/6 13:21
加载中...