ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021.7.7 校内模拟赛游记

2021-07-07 13:33:58  阅读:168  来源: 互联网

标签:std 校内 2021.7 int pos substr org 游记 size


先来 T1 大模拟镇楼,其它题补完再写。

1	#include <iostream>
2	#include <string>
3	#include <algorithm>
4	#include <cstdio>
5	const std::string D = "GSBQ";
6	std::string erase(std::string s, int l, int r) {
7		if (l > r) return s;
8		return s.substr(0, l) + s.substr(r+1, s.size()-r-1);
9	}
10	struct twt {
11		std::string org, Z, F, ans;
12		bool isPos, isZer;
13		twt() { isPos = 1; isZer = 0; org = Z = F = ans = ""; }
14		void opt() {
15			int cntn = 0, pos = 0;
16			for (int i = 0; i < (signed)org.size() && org[i] == '+' 
17			                                       || org[i] == '-'; i++)
18				cntn += org[i] == '-', pos ++; 
19			if (cntn % 2 == 0) isPos = 1;
20			else isPos = 0;
21			org = org.substr(pos, org.size() - pos);
22		}
23		void div() {
24			int pos = -1;
25			for (int i = 0; i < (signed)org.size(); i++)
26				if (org[i] == '.') { pos = i; break; }
27			Z = org.substr(0, pos);
28			if (pos != -1 && pos != (signed)org.size() - 1) 
29				F = org.substr(pos+1, org.size()-pos-1);  
30		}
31		void prez() {
32			int pos = 0;
33			for (int i = 0; i < (signed)Z.size() && Z[i] == '0'; i++)
34				pos ++;
35			Z = Z.substr(pos, Z.size() - pos);
36		}
37		void sucz() {
38			int pos = (signed)F.size() - 1;
39			for (int i = (signed)F.size() - 1; i >= 0 && F[i] == '0'; i--)
40				pos --;
41			F = F.substr(0, pos + 1);
42		}
43		std::string printUnit(std::string t) {
44			std::string an; 
45			if (t == "0000") return "";
46			if (t[0] != '0') an += t[0];
47			bool proz = 0;
48			for (int i = 1; i < (signed)t.size(); i++) 
49				if (t[i] != '0') {
50					if (!proz) an = an + D[i] + t[i];
51					else proz = 0, an = an + "0" + D[i] + t[i];
52				}
53				else proz = 1;
54			if (proz) an = an + "0"; 
55			return an;  
56		}
57		std::string fix(std::string x) {
58			bool doit = 1;
59			while (doit) {
60				int pos = -1;
61				for (int i = 0; i < (signed)x.size()-1; i++) 
62					if (x[i] == '0' && (x[i+1] == 'Q' ||
63					                    x[i+1] == 'B' ||
64					                    x[i+1] == 'S')) pos = i;
65				if (pos == -1) doit = 0;
66				else x = erase(x, pos, pos+1);
67			}
68	
69			int pos = (signed)x.size() - 1;
70			for (int i = (signed)x.size() - 1; i >= 0 && x[i] == '0'; i--)
71				pos --;
72			x = erase(x, pos+1, x.size()-1);
73			
74			for (int i = 0; i < (signed)x.size()-1; i++) 
75				if (x[i] == '0' && x[i+1] == 'W') {
76					x = erase(x, i, i);
77					break;
78				}
79				
80			for (int i = 0; i < (signed)x.size()-1; i++) 
81				if (x[i] == '0' && x[i+1] == 'Y') {
82					x = erase(x, i, i);
83					break;
84				}
85			return x;
86		}
87		void print() {
88			std::reverse(Z.begin(), Z.end());
89			std::string an;
90			if (Z.size() == 0) an += "0"; 
91			else if (Z.size() > 4) {
92				an += printUnit(Z.substr(0, 4)) + "W";
93				if (Z.size() > 8) {
94					if (Z.substr(4, 4) != "0000") an += printUnit(Z.substr(4, 4));
95					else an = erase(an, an.size()-1, an.size()-1);
96					an += "Y" + printUnit(Z.substr(8, Z.size() - 8));
97				}
98				else an += printUnit(Z.substr(4, Z.size()-4));
99			}
100			else an += printUnit(Z.substr(0, Z.size()));
101			
102			std::reverse(an.begin(), an.end());
103	//		std::cout << an;
104			an = fix(an); 
105			
106			if (F.size()) an = an + ((!an.size()) ? "0" : "") +  "D" + F;
107			if (!Z.size() && !F.size()) isZer = 1;
108			ans = an;
109		}
110		void doit(std::string x) {
111			org = x;
112			opt(), div(), prez(), sucz(), print();
113		}
114	};
115	struct dwd {
116		twt m, s;
117		std::string t;
118		bool isM;
119		dwd () { isM = 0; }
120		void read() {
121			std::cin >> t;
122			int pos = -1;
123			for (int i = 0; i < (signed)t.size(); i++) 
124				if (t[i] == '/') { pos = i; break; }
125			if (pos == -1) s.doit(t);
126			else s.doit(t.substr(0, pos)), isM = 1, m.doit(t.substr(pos+1, t.size()-pos-1));
127		}
128		void print() {
129			bool isNeg = m.isPos ^ s.isPos;
130			if (s.ans == "" || s.ans == "0") return std::cout << "0", void();
131			if (m.ans == "1") isM = 0;
132			if (isNeg) std::cout << "F";
133			if (isM) std::cout << m.ans << "fz";
134			std::cout << s.ans;				
135		}
136	} a;
137	int main() {
138		freopen("read.in", "r", stdin);
139		freopen("read.out", "w", stdout);
140		
141		std::ios::sync_with_stdio(false);
142		a.read(), a.print();
143		return 0;
144	}
145	
146	// 0156Z - Coding completed
147	// 0156Z - Before submit checklist completed

标签:std,校内,2021.7,int,pos,substr,org,游记,size
来源: https://www.cnblogs.com/Acfboy/p/20210707_.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有