Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.08 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long powww(int a){
  4. int ans=1;
  5. for(int i=0;i<a;i++){
  6. ans*=10;
  7. }
  8. return ans;
  9. }
  10. bool compare(string s1,string s2){
  11. if(s1==s2){
  12. return false;
  13. }
  14. ///cout<<s1<<" "<<s2<<"\n";
  15. if(s1[0]=='.')s1="0"+s1;
  16. if(s2[0]=='.')s2="0"+s2;
  17. ///Перевод первой строки если она подана не десяитичным вариантом и первый элемент дробный
  18. if(s1.find('E')!=string::npos){
  19. string str_integer_before_e="";
  20. int integer_before_e=0;
  21. string str_amount_after_dot="";
  22. int amount_after_dot=0;
  23. int start;
  24. int m;
  25. if(s1[0]=='-')m=-1; else m=1;
  26. while(s1[0]=='0')s1.erase(0,1);
  27. if(s1[s1.find('E')+1]!='-' && s1[s1.find('E')+1]!='+' )
  28. start=s1.find('E')+1; else start=s1.find('E')+2;
  29. for(int i=start;i<s1.size();i++){
  30. str_amount_after_dot+=s1[i];
  31. }
  32. for(int i=0;i<s1.find('E');i++){
  33. if(s1[i]!='.' && s1[i]!='-')str_integer_before_e+=s1[i];
  34. }
  35. for(int i=0;i<str_amount_after_dot.size();i++){
  36. amount_after_dot*=10;
  37. amount_after_dot+=str_amount_after_dot[i]-48;
  38. }
  39. int something=0;
  40. if(s1.find('.')!=string::npos){
  41. something=s1.find('E')-s1.find('.')-1;
  42. }
  43. if(s1[s1.find('E')+1]=='-'){
  44. int counter=something+amount_after_dot;
  45. if(counter>=str_integer_before_e.size()){
  46. string new_string="";
  47. if(m==1)new_string="0."; else new_string="-0.";
  48. for(int i=0;i<counter-str_integer_before_e.size();i++)new_string+="0";
  49. new_string+=str_integer_before_e;
  50. s1=new_string;
  51. } else {
  52. string new_string="";
  53. if(m==-1)new_string+="-";
  54. for(int i=0;i<str_integer_before_e.size();i++){
  55. if(i==str_integer_before_e.size()-counter)new_string+=".";
  56. new_string+=str_integer_before_e[i];
  57. }
  58. s1=new_string;
  59. }
  60. } else {
  61. int counter=amount_after_dot-something;
  62. string new_string="";
  63. if(m==-1)new_string="-";
  64. if(counter>=0){
  65. new_string+=str_integer_before_e;
  66. for(int i=0;i<counter;i++)new_string+="0";
  67. s1=new_string;
  68. } else {
  69. counter=abs(counter);
  70. for(int i=0;i<str_integer_before_e.size();i++){
  71. if(str_integer_before_e.size()-i==counter){
  72. new_string+=".";
  73. }
  74. new_string+=str_integer_before_e[i];
  75. }
  76. s1=new_string;
  77. }
  78. }
  79. }
  80. if(s2.find('E')!=string::npos){
  81. string str_integer_before_e="";
  82. int integer_before_e=0;
  83. string str_amount_after_dot="";
  84. int amount_after_dot=0;
  85. int start;
  86. int m;
  87. if(s2[0]=='-')m=-1; else m=1;
  88. while(s2[0]=='0')s2.erase(0,1);
  89. if(s2[s2.find('E')+1]!='-' && s2[s2.find('E')+1]!='+' )
  90. start=s2.find('E')+1; else start=s2.find('E')+2;
  91. for(int i=start;i<s2.size();i++){
  92. str_amount_after_dot+=s2[i];
  93. }
  94. for(int i=0;i<s2.find('E');i++){
  95. if(s2[i]!='.' && s2[i]!='-')str_integer_before_e+=s2[i];
  96. }
  97. for(int i=0;i<str_amount_after_dot.size();i++){
  98. amount_after_dot*=10;
  99. amount_after_dot+=str_amount_after_dot[i]-48;
  100. }
  101. int something=0;
  102. if(s2.find('.')!=string::npos){
  103. something=s2.find('E')-s2.find('.')-1;
  104. }
  105. if(s2[s2.find('E')+1]=='-'){
  106. int counter=something+amount_after_dot;
  107. if(counter>=str_integer_before_e.size()){
  108. string new_string="";
  109. if(m==1)new_string="0."; else new_string="-0.";
  110. for(int i=0;i<counter-str_integer_before_e.size();i++)new_string+="0";
  111. new_string+=str_integer_before_e;
  112. s2=new_string;
  113. } else {
  114. string new_string="";
  115. if(m==-1)new_string+="-";
  116. for(int i=0;i<str_integer_before_e.size();i++){
  117. if(i==str_integer_before_e.size()-counter)new_string+=".";
  118. new_string+=str_integer_before_e[i];
  119. }
  120. s2=new_string;
  121. }
  122. } else {
  123. int counter=amount_after_dot-something;
  124. string new_string="";
  125. if(m==-1)new_string="-";
  126. if(counter>=0){
  127. new_string+=str_integer_before_e;
  128. for(int i=0;i<counter;i++)new_string+="0";
  129. s2=new_string;
  130. } else {
  131. counter=abs(counter);
  132. for(int i=0;i<str_integer_before_e.size();i++){
  133. if(str_integer_before_e.size()-i==counter){
  134. new_string+=".";
  135. }
  136. new_string+=str_integer_before_e[i];
  137. }
  138. s2=new_string;
  139. }
  140. }
  141. }
  142. ///cout<<s1<<" "<<s2<<"\n";
  143. ///Сравнение отрицательных с положительными (1-отрицательное, 2-положительное)
  144. if(s1[0]=='-' && s2[0]!='-'){
  145. return false;
  146. }
  147. ///Сравнение отрицательных с положительными (1-положительное, 2-отрицательное)
  148. if(s1[0]!='-' && s2[0]=='-'){
  149. return true;
  150. }
  151. ///Сравнение отрицательных рациональных с одинаковой позицией точки
  152. if(s1[0]=='-' && s2[0]=='-' && s1.find('.')!=string::npos && s2.find('.')!=string::npos && s1.find('.')==s2.find('.')){
  153. for(int i=1;i<min(s1.size(),s2.size());i++){
  154. if(s1[i]>s2[i])return false; else if(s1[i]<s2[i])return true;
  155. }
  156. if(s1.size()<s2.size()){
  157. for(int i=s1.size();i<s2.size();i++){
  158. if(s2[i]!='0')return true;
  159. }
  160. } else return false;
  161. }
  162. ///Сравнение отрицательных рациональных с разной позицией точки
  163. if(s1[0]=='-' && s2[0]=='-' && s1.find('.')!=string::npos && s2.find('.')!=string::npos){
  164. if(s1.find('.')<s2.find('.'))return true; else return false;
  165. }
  166. ///Сравнение отрицательных целых
  167. if(s1[0]=='-' && s2[0]=='-' && s1.find('.')==string::npos && s2.find('.')==string::npos){
  168. if(s1.size()>s2.size())return false; else if(s1.size()<s2.size())return true;
  169. for(int i=1;i<s1.size();i++){
  170. if(s1[i]<s2[i])return true; else if(s1[i]>s2[i])return false;
  171. }
  172. }
  173. ///Сравнение положительных рациональных с одинаковой позицией точки
  174. if(s1[0]!='-' && s2[0]!='-' && s1.find('.')!=string::npos && s2.find('.')!=string::npos && s1.find('.')==s2.find('.')){
  175. for(int i=0;i<min(s1.size(),s2.size());i++){
  176. if(s1[i]>s2[i])return true; else if(s1[i]<s2[i])return false;
  177. }
  178. if(s2.size()<s1.size()){
  179. for(int i=s2.size();i<s1.size();i++){
  180. if(s1[i]!='0')return true;
  181. }
  182. }
  183. }
  184. ///Сравнение положительных рациональных с разной позицией точки
  185. if(s1[0]!='-' && s2[0]!='-' && s1.find('.')!=string::npos && s2.find('.')!=string::npos && s1.find('.')!=s2.find('.')){
  186. if(s1.find('.')>s2.find('.'))return true; else return false;
  187. }
  188. ///Сравнение положительных целых
  189. if(s1[0]!='-' && s2[0]!='-' && s1.find('.')==string::npos && s2.find('.')==string::npos){
  190. if(s1.size()>s2.size())return true; else if(s1.size()<s2.size())return false;
  191. for(int i=0;i<s1.size();i++){
  192. if(s1[i]>s2[i])return true; else if(s1[i]<s2[i])return false;
  193. }
  194. }
  195. ///Сравнение положительных целых и рациональных (1-целое, 2-рациональное)
  196. if(s1[0]!='-' && s2[0]!='-' && s1.find('.')==string::npos && s2.find('.')!=string::npos){
  197. if(s1.size()<s2.find('.'))return false; else if(s1.size()>s2.find('.'))return true;
  198. for(int i=0;i<s1.size();i++){
  199. if(s1[i]>s2[i])return true; else if(s1[i]<s2[i])return false;
  200. }
  201. return false;
  202. }
  203. ///Сравнение положительных целых и рациональных (1-рациональное, 2-целое)
  204. if(s1[0]!='-' && s2[0]!='-' && s1.find('.')!=string::npos && s2.find('.')==string::npos){
  205. if(s1.find('.')>s2.size())return true; else if(s1.find('.')<s2.size())return false;
  206. for(int i=0;i<s2.size();i++){
  207. if(s1[i]>s2[i])return true; else if(s1[i]<s2[i])return false;
  208. }
  209. for(int i=s1.find('.')+1;i<s1.size();i++){
  210. if(s1[i]!='0')return true;
  211. }
  212. return false;
  213. }
  214. ///Сравнение отрицательных целых и рациональных (1-целое,2-рациональное)
  215. if(s1[0]=='-' && s2[0]=='-' && s1.find('.')==string::npos && s2.find('.')!=string::npos){
  216. if(s2.find('.')<s1.size())return false; else if(s2.find('.')>s1.size())return true;
  217. for(int i=0;i<s1.size();i++){
  218. if(s1[i]<s2[i])return true; else if(s2[i]<s1[i])return false;
  219. }
  220. for(int i=s2.find('.');i<s2.size();i++){
  221. if(s2[i]!='0')return true;
  222. }
  223. return false;
  224. }
  225. ///Сравнение отрицательных целых и рациональных (1-рациональное,2-целое)
  226. if(s1[0]=='-' && s2[0]=='-' && s1.find('.')!=string::npos && s2.find('.')==string::npos){
  227. if(s1.find('.')<s2.size())return true; else if(s1.find('.')>s2.size())return false;
  228. for(int i=0;i<s2.size();i++){
  229. if(s1[i]<s2[i])return true; else if(s2[i]<s1[i])return false;
  230. }
  231. return false;
  232. }
  233. return false;
  234. }
  235. int main(){
  236. freopen("input.txt","r",stdin);
  237. freopen("output.txt","w",stdout);
  238. string s;
  239. double sum=0,k=0,m=1,j=1,i=0,ans=-1,ansn=0;
  240. string max1="-2000000001";
  241. string ansstr="";
  242. string s1="";
  243. while(getline(cin,s)){
  244. i=0;
  245. ///cout<<i<<"\n";
  246. while(i<s.size()){
  247. if(s[i]=='+' || s[i]!='e' && s[i]!='.' && s[i]!='-' && (s[i]<'0' || s[i]>'9') && i<s.size()){
  248. i++;
  249. } else {
  250. m=1;
  251. k=0;
  252. bool dot=0;
  253. s1="";
  254. int counter=0,countern=0;
  255. while(i<s.size() && ((s[i]>='0' && s[i]<='9' )) || s[i]=='-' || s[i]=='.' || s[i]=='e' || s[i]=='+'){
  256. if(s[i]=='-'){/*cout<<"l"<<"\n"*/m=-1;s1+=s[i];i++;continue;}
  257. if(s[i]=='.'){dot=1;i++;s1+=".";continue;}
  258. if(dot){
  259. counter++;
  260. if((double)((int)s[i]-48)==0)countern++; else countern=0;
  261. k+=(double)((int)s[i]-48)/powww(counter);
  262. s1+=s[i];
  263.  
  264. } else {
  265. k*=10;
  266. k+=(int)s[i]-48;
  267. s1+=s[i];
  268. }
  269. /// cout<<k<<"\n";
  270. i++;
  271. //cout<<i<<"\n";
  272. }
  273. ///cout<<max1<<" "<<k<<"\n";
  274. ///cout<<m<<"\n";
  275. if(compare(s1,max1)){
  276. max1=s1;
  277. ans=j;
  278. ansn=countern;
  279. ansstr=s1;
  280. }
  281. k=0;
  282. ///cout<<"\n";
  283. }
  284. }
  285. j++;
  286. }
  287. if(ans!=-1){
  288. cout<<ans<<" ";
  289. cout<<max1;
  290. }
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement