感觉没错,但 WA + TLE???
查看原帖
感觉没错,但 WA + TLE???
482610
Mortidesperatslav楼主2024/3/18 19:44
#include<bits/stdc++.h>
using namespace std;
int t;
int x, y;
string st;
int ans[514514], y9[514514];
int f(int x) {
	if (!x)
		return 0;
	return x + f(x / 10);
}
int sti(string x) {
	int res = 0;
	for (int i = 0; i < x.size(); i++)
		res = res * 10 + (x[i] - '0');
	return res;
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> t;
	while (t--) {
		cin >> st;
		if (st.size() > 9) {
			int n = st.size(), fnd = 0;
			for (int i = 1; i <= n; i++)
				ans[i] = st[i - 1] - '0';
			for (int i = 1; i <= n / 2; i++)
				swap(ans[i], ans[n - i + 1]);
			for (int i = 1; i <= n; i++)
				y9[i] = ans[i];
			int jw = 0;
			for (int i = 1; i <= n; i++){
				ans[i] = (ans[i] - jw) * 9 + jw;
				ans[i + 1] += ans[i] / 10;
				jw = ans[i] / 10;
				ans[i] %= 10;
				if (ans[n + 1])
					n++;
			}
			long long sum = 0, cha = 0;
			while (ans[1] != 0){
				ans[1] ++;
				ans[2] += ans[1] / 10;
				ans[1] %= 10;
				cha++;
			}
			for (int i = 1; i <= n; i++)
				if (ans[i] >= 10){
					ans[i + 1] += ans[i] / 10;
					ans[i] %= 10;
				}
			for (int i = 1; i <= n; i++)
				sum += ans[i];
			if (sum == cha){
				bool qd = 0;
				for (int i = n; i >= 2; i--){
					if (ans[i] != 0)
						qd = 1;
					if (ans[i] != 0 || qd == 1)
						cout << ans[i]; 
				}
				fnd = 1;
				cout << "\n";
				continue;
			}
			while (1){
				if (cha > 9 * n)
					break;
				cha += 10;
				sum++;
				ans[2]++;
				for (int i = 2; i <= n; i++)
					if (ans[i] >= 10){
						sum -= 9;
						ans[i] %= 10;
						ans[i + 1] ++;
					}
				for (int i = n; i >= 1; i--)
					cout << ans[i];
			//	cout << "\n:::\n";
			//	cout << cha << " " << sum << "\n\n\n";
				if (sum == cha){
					bool qd = 0;
					for (int i = n; i >= 2; i--){
						if (ans[i] != 0)
							qd = 1;
						if (ans[i] != 0 || qd == 1)
							cout << ans[i]; 
					}
					fnd = 1;
					cout << "\n";
					break;
				}
			}
			if (!fnd)
				cout << "-1\n";
		}
		if (st.size() <= 9) {
			y = sti(st);
			int r = 0;
			x = -1;
			for (int i = 0; i <= y; i++) {
				if (f(i) == y) {
					if (x == -1)
						x = i;
					else
						r = 1;
				}
			}
			if (r == 1)
				cout << "-1\n";
			else
				cout << x << "\n";
		}
	}
}
2024/3/18 19:44
加载中...