QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#650119#6621. Luggage Lockyeah14WA 612ms13812kbC++175.4kb2024-10-18 13:07:152024-10-18 13:07:16

Judging History

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

  • [2024-10-18 13:07:16]
  • 评测
  • 测评结果:WA
  • 用时:612ms
  • 内存:13812kb
  • [2024-10-18 13:07:15]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ull long long
#define PII  pair<int ,int>
const int INF = -1145141919810;
const int mod = 1e9 + 7;
const int N = 1e6 + 7;
int fp(int a, int x, int mod) {
	int ans = 1;
	while (x) {
		if (x & 1)ans *= a;
		ans %= mod;
		a *= a;
		a %= mod;
		x >>= 1;
	}
	return ans;
}


//map<char, int>p;
map<string, int>p;
void solve() {
	int a[4],b[4];
	int c[4],d[4];
	string s1, s2;
	cin >> s1 >> s2;
	for (int i = 0; i < 4; i++) {
		a[i] = s1[i] - '0';
		b[i] = s2[i] - '0';
		c[i] = b[i] - a[i];
		d[i] = c[i];
		if (abs(d[i]) > 5) {
			if (d[i] < 0)d[i] += 10;
			else d[i] -= 10;
		}
	}
	int ans = 0x3f3f3f;
	for (int k = 0; k < 16; k++) {
		int cc[4];
		int j = k;
		int f = 8;
		int sss = 0;
		for (int i = 0; i < 4; i++) {
			cc[i] = j % 2;
			j /= 2;
		}
		string ss;
		int tt[4];
		for (int i = 0; i < 4; i++) {
			if (cc[i] == 1) {
				if (c[i] > 0)d[i] = c[i] - 10;
				else if (c[i] < 0)d[i] = c[i] + 10;
			}
			else d[i] = c[i];
			char ch = '0' + d[i];
			ss += d[i];
			//tt[i] = d[i];
		}
		if (p.count(ss) != 0) {
			ans = min(ans, p[ss]);
			continue;
		}
		int s = 0, e = 0;
		int t = abs(d[0]);
		int res = 0;
		int minn = 0;
		//int minn;
		for (int i = 0; i < 4; i++) {
			if (i == 3) {
				if (e != 3)res += abs(d[i]) - minn;
				else {
					res += t - minn;
					s = e;
					t = 0;
				}
			}
			else if (d[i] * d[i + 1] > 0 && abs(d[i]) >= abs(d[i + 1]))
			{
				e = i + 1;
				t = max(t, abs(d[i + 1]));
				//minn = abs(d[i]);
			}
			else {
				if (e < s) {
					res += abs(d[i]) - minn;
					if (d[i] * d[i + 1] > 0)minn = abs(d[i]);
					else minn = 0;
					s = i + 1;
					t = abs(d[i + 1]);
					continue;
				}
				res += t - minn;
				s = e + 1;
				t = abs(d[i + 1]);
				if (d[i] * d[i + 1] > 0)minn = abs(d[i]);
				else minn = 0;
			}
		}
		
		p[ss] = res;
		ans = min(ans, res);
		/*cout << res<<" ";
		for (int i = 0; i < 4; i++) {
			cout << d[i] << " ";
		}
		cout << endl;*/
	 }
	cout << ans << endl;
}
//&&(((sum[n]+k)%mid==0)||(sum[n]/mid!=(sum[n]+k)/mid)||(mid-(sum[n]%mid)>=k))
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	int t = 1;
	cin >> t;
	int k = t;
	//er(9e7);
	//cout <<  7*4% 10;
	while (t--) {
		//if (k == 100000)cout << k - t + 1 << " ";
		solve();
	}
	//pr[5216953]
}
//int n;
//cin >> n;
//for (int i = 1; i <= n; i++) {
//	cin >> a[i];
//}
//int maxx = 0, minn = INF;
//int sum = 0;
//for (int i = n; i <= 1; i++) {
//	sum += minn;
//	if (top == 0) {
//		minn = a[i];
//		st[top++] = a[i];
//	}
//	else {
//		if (a[i] > top && a[i] > minn)
//	}
//}
//cout << maxx - minn << endl;
//7 2 1 4 5 1 3 3
//4 1000 1000 1000 1000
//0、
/*int maxx1 = 1;
		if (d[0] * d[1] > 0 && d[1] * d[2] > 0 && d[3] * d[2] > 0) {
			int maxx = 0,mi=0;
			for (int i = 0; i < 4; i++) {
				if (maxx < abs(d[i])) {
					maxx = abs(d[i]);
					mi = i;
				}
				d[i] = abs(d[i]);
			}
			if (mi == 0) {
				if (d[1] >= d[2]) {
					if (d[2] >= d[3])res = maxx;
					else res = maxx + d[3] - d[2];
				}
				if (d[1] < d[2]){
					if (abs(d[2]) > d[3]) {
						res = maxx + d[2] - max(d[1], d[3]) - d[2];
					}
					else res = maxx - d[2] + d[3];
					}
			}
			if (mi == 1) {
				if (d[2] > d[3]) {
					res = maxx;
				}
				else res = maxx - d[2] + d[3];
			}
			if (mi == 2) {
				if (abs(d[0]) < abs(d[1])) {
					res = maxx;
				}
				else res = maxx - d[1] + d[0];
			}
			if (mi == 3) {
				reverse(d, d + 4);
				if (d[1] >= d[2]) {
					if (d[2] >= d[3])res = maxx;
					else res = maxx + d[3] - d[2];
				}
				if (d[1] < d[2]) {
					if (abs(d[2]) > d[3]) {
						res = maxx + d[2] - max(d[1], d[3]) - d[2];
					}
					else res = maxx - d[2] + d[3];
				}
			}
		}
		else if ((d[0] * d[1] > 0 && d[1] * d[2] <= 0 && d[2] * d[3]>0)) {
			res = max(abs(d[0]), abs(d[1])) + max(abs(d[2]), abs(d[3]));
		}
		else if ((d[0] * d[1] <= 0 && d[1] * d[2] > 0 && d[2] * d[3] > 0)) {
			for (int i = 0; i < 4; i++) {
					d[i] = abs(d[i]);
			}
			if (d[2] >= d[3] && d[2] >= d[1])res = d[2];
			else if (d[2] <= d[3] && d[1] <= d[2])res = d[3];
			else if (d[2] >= d[3] && d[1] <= d[2])res = d[1] - d[2] + d[3];
			else res = d[1];
			res += d[0];
		}
		else if ((d[0] * d[1] > 0 && d[1] * d[2] > 0 && d[2] * d[3] <= 0)) {
			reverse(d, d + 4);
			for (int i = 0; i < 4; i++) {
				d[i] = abs(d[i]);
			}
			if (d[2] >= d[3] && d[2] >= d[1])res = d[2];
			else if (d[2] <= d[3] && d[1] <= d[2])res = d[3];
			else if (d[2] >= d[3] && d[1] <= d[2])res = d[1] - d[2] + d[3];
			else res = d[1];
			res += d[0];
		}
		else if ((d[0] * d[1] <= 0 && d[1] * d[2] <= 0 && d[2] * d[3] <= 0)) {
			for (int i = 0; i < 4; i++) {
				d[i] = abs(d[i]);
			}
			res = d[0] + d[1] + d[2] + d[3];
		}
		else if ((d[0] * d[1] <= 0 && d[1] * d[2] <= 0 && d[2] * d[3] > 0)) {
			for (int i = 0; i < 4; i++) {
				d[i] = abs(d[i]);
			}
			res = d[0] + d[1] + max(d[2], d[3]);
		}
		else if ((d[0] * d[1] > 0 && d[1] * d[2] <= 0 && d[2] * d[3] <= 0)) {
			reverse(d, d + 4);
			for (int i = 0; i < 4; i++) {
				d[i] = abs(d[i]);
			}
			res = d[0] + d[1] + max(d[2], d[3]);
		}
		else if (((d[0] * d[1] <= 0 && d[1] * d[2] > 0 && d[2] * d[3] <= 0))) {
			for (int i = 0; i < 4; i++) {
				d[i] = abs(d[i]);
			}
			res = d[0] + d[3] + max(d[2], d[1]);
		}*/

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3572kb

input:

6
1234 2345
1234 0123
1234 2267
1234 3401
1234 1344
1234 2468

output:

1
1
4
5
1
4

result:

ok 6 numbers

Test #2:

score: -100
Wrong Answer
time: 612ms
memory: 13812kb

input:

100000
9138 9251
0887 4577
2745 6294
6883 1197
8654 2502
7867 7941
7505 2717
1497 7726
3337 8042
2767 8782
5311 4368
9711 6229
7105 8101
3553 6673
6544 7940
8848 8920
1458 6315
4605 2931
5505 7310
5963 4765
7625 0418
4049 0136
2078 6899
3339 1080
2276 6814
4249 4182
1861 0824
8975 8926
6447 6965
226...

output:

3
6
6
8
9
7
6
7
10
9
6
8
5
4
8
5
8
7
9
4
8
8
8
6
8
5
7
5
7
5
7
7
6
8
4
10
6
5
6
7
7
7
4
7
8
6
5
9
7
6
7
11
10
10
7
5
6
5
7
6
7
9
5
5
6
6
8
5
7
9
10
6
11
5
6
7
6
6
8
6
8
7
7
8
7
8
6
7
6
5
5
6
6
5
7
5
9
6
7
7
7
9
6
9
5
5
8
10
7
3
5
6
7
9
8
6
6
7
10
5
5
6
9
8
6
8
6
5
7
6
11
5
9
6
7
5
10
7
5
8
9
8
7
7
7...

result:

wrong answer 73rd numbers differ - expected: '10', found: '11'