P2555 wa90pts求条
  • 板块灌水区
  • 楼主xxxst12
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/24 14:26
  • 上次更新2025/1/24 16:55:51
查看原帖
P2555 wa90pts求条
1392330
xxxst12楼主2025/1/24 14:26
#include <bits/stdc++.h>
using namespace std;
string t[12] = {"", "S", "B", "Q", "W", "SW", "BW", "QW", "Y", "SY"};
string g(string s1){
	char a[20]={};
	int len1=s1.size();
	string s="";
	for(int i=0;i<len1;i++){
		a[i]=s1[len1-1-i];
	}
	while(a[len1-1]=='0'&&len1>1){
		len1--;
	}
	for(int i=len1-1;i>=0;i--){
		s+=a[i];
	}
	return s;
}
struct node{
	char c;
	int id;
}s1[20][5]; 
string f(string s) {
	int len = s.size(), cnt = 0, flag = 0;
	string ans;
	int x = ceil(len * 1.0 / 4) * 4;
	for (int i = 0; i < x - len; i++) {
		s = " " + s;
	}
	for (int i = x - 1; i >= 0; i--) {
		if ((i + 1) % 4 == 0) {
			++cnt;
			s1[cnt][0].c= s[i - 3];
			s1[cnt][1].c= s[i - 2];
			s1[cnt][2].c= s[i - 1];
			s1[cnt][3].c= s[i];
			s1[cnt][0].id=i-3;
			s1[cnt][1].id=i-2;
			s1[cnt][2].id=i-1;
			s1[cnt][3].id=i;
		}
	}
	for (int i = cnt; i >= 1; i--) {
		flag = 0;
		for (int j = 0; j <= 3; j++) {
			if (s1[i][j].c!= ' ') {
				if((s1[i][0].c == '0') ||(s1[i][1].c == '0' && s1[i][2].c == '0')|| (s1[i][0].c == '0' && s1[i][1].c == '0') || (s1[i][0].c == '0' && s1[i][1].c == '0' && s1[i][2].c == '0') || (s1[i][0].c == '0' && s1[i][1].c == '0' && s1[i][2].c == '0' && s1[i][3].c == '0')){
					if(flag==0){
						ans += "0";
						flag=1;
					}
				}
				if((flag==0&&s1[i][j].c!='0')||(flag==1&&s1[i][j].c!='0')){
					if(s1[i][1].c=='0'||s1[i][2].c=='0'){
						if(ans[ans.size()-1]!='0'){
							if(s1[i][j].id!=len-1||s1[i][j].id!=len-2&&(j!=2||j!=3)&&(s1[i][1].c=='0'&&s1[i][2].c=='0')){
								ans+='0';
							}
						}
					}
					ans += s1[i][j].c+ t[3 - j];
				}
			}
		}
		ans += t[4 * i - 4];
	}
	return g(ans);
}
int main() {
	string s, ans;
	cin >> s;
	int len = s.size(), pos = 0, flag = 0, flag1 = 0, cnt = 0;
	s = " " + s;
	if (s[1] != '-'&&s[1]!='+') {
		string tmp;
		for (int i = 1; i <= len; i++) {
			if (s[i] == '.') {
				pos = i;
				flag = 1;
			}
		}
		if (!flag) pos = len;
		int n = 0;
		for (int i = 1; i <= pos; i++) {
			if (s[i] == '0') {
				cnt++;
			}
		}
		for (int i = 1; i <= pos; i++) {
			if (s[i] == '0' && s[i + 1] != '0') {
				n = i + 1;
				break;
			}
		}
		if (flag&&cnt == pos - 1) {
			if (s[len] != '.') {
				ans += "0D";
				flag1 = 1;
			} else {
				cout << 0;
				return 0;
			}
		}
		if(s[1]!='0'){
			n=0;
		} 
		if (n == 0) {
			for (int i = 1; !flag ? i <= pos : i < pos; i++) {
				tmp += s[i];
			}
		} else {
			for (int i = n; i <= pos; i++) {
				tmp += s[i];
			}
		}
		if(!flag1) ans += f(tmp);
		if (flag && !flag1&&s[s.size()-1]!='.') ans += 'D';
		for (int i = pos + 1; i <= len; i++) {
			ans += s[i];
		}
		if (ans != "") {
			cout << ans;
			return 0;
		} else {
			cout << 0;
			return 0;
		}
	} else if (s[1] == '-'||s[1]=='+') {
		string tmp;
		if(s[1]!='+') ans += 'F';
		for (int i = 1; i <= len; i++) {
			if (s[i] == '.') {
				pos = i;
				flag = 1;
			}
		}
		if (!flag) pos = len;
		int n = 0;
		for (int i = 1; i <= pos; i++) {
			if (s[i] == '0') {
				cnt++;
			}
		}
		for (int i = 1; i <= pos; i++) {
			if (s[i] == '0' && s[i + 1] != '0') {
				n = i + 1;
				break;//去前导0
			}
		}
		if (flag&&cnt == pos - 2) {
			if (s[len] != '.') {
				ans += "0D";
				flag1 = 1;
			} else {
				cout << 0;
				return 0;
			}
		}
		if(s[2]!='0'){
			n=0;
		} 
		if (n == 0 ) {
			for (int i = 2; !flag ? i <= pos : i < pos; i++) {
				tmp += s[i];
			}
		} else {
			for (int i = n; i < pos; i++) {
				tmp += s[i];
			}
		}

		if(!flag1) ans += f(tmp);
		if (flag && !flag1&&s[s.size()-1]!='.') ans += 'D';
		for (int i = pos + 1; i <= len; i++) {
			ans += s[i];
		}//处理小数
		if (ans != "F") {
			cout << ans;
			return 0;
		} else {
			cout << 0;
			return 0;
		}
	}


	return 0;
}
2025/1/24 14:26
加载中...