玄关,求调
查看原帖
玄关,求调
502695
idle_onlooker楼主2025/1/12 11:22

本地运行没问题,但交洛谷上TLE了(大悲) 提交记录 大体思路就是,把未知数移到左边,常数移到右边,然后相除

#include<bits/stdc++.h>
#define int long long
using namespace std;
int num,a,b,flag;
string ch;
char c;
signed main(){
	cin>>ch;
	for(int i=0;i<ch.size();i++){
		if(i==0&&ch[i]>='0'&&ch[i]<='9'){//第一位就是数字 
			int n;
			for(int j=i;j<ch.size();j++){
				if(!(ch[j]>='0'&&ch[j]<='9')){
					n=j;
					break;
				}
				num*=10;
				num+=ch[j]-'0';
			}
			if(ch[n]>='a'&&ch[n]<='z') a+=num,i=n,c=ch[n];//是未知数的系数 
			else b-=num,i=n-1;
			num=0;
		}else if(i==0&&ch[i]>='a'&&ch[i]<='z') a+=1,c=ch[i];//第一位是未知数说明系数是一 
		else if(ch[i]=='+'){
			int n;
			for(int j=i+1;j<ch.size();j++){
				if(!(ch[j]>='0'&&ch[j]<='9')){
					n=j;
					break;
				}
				num*=10;
				num+=ch[j]-'0';
			}
			if(ch[n]>='a'&&ch[n]<='z'){
				if(num==0) num=1;
				a+=num,i=n,c=ch[n];
			}else b-=num,i=n-1;
			num=0;
		}else if(ch[i]=='-'){
			int n;
			for(int j=i+1;j<ch.size();j++){
				if(!(ch[j]>='0'&&ch[j]<='9')){
					n=j;
					break;
				}
				num*=10;
				num+=ch[j]-'0';
			}
			num*=-1;
			if(num==0) num=-1;
			if(ch[n]>='a'&&ch[n]<='z'){
				if(num==0) num=-1;
				a+=num,i=n,c=ch[n];
			}else b-=num,i=n-1;
			num=0;
		}else if(ch[i]=='='){
			flag=i;
			break;
		}
	}
	for(int i=flag+1;i<ch.size();i++){
		if(i==flag+1&&ch[i]>='0'&&ch[i]<='9'){
			int n;
			for(int j=i;j<ch.size();j++){
				if(!(ch[j]>='0'&&ch[j]<='9')){
					n=j;
					break;
				}
				num*=10;
				num+=ch[j]-'0';
			}
			if(ch[n]>='a'&&ch[n]<='z') a-=num,i=n,c=ch[n];
			else b+=num,i=n-1;
			num=0;
		}else if(i==flag+1&&ch[i]>='a'&&ch[i]<='z') a-=1,c=ch[i];
		else if(ch[i]=='+'){
			int n;
			for(int j=i+1;j<ch.size();j++){
				if(!(ch[j]>='0'&&ch[j]<='9')){
					n=j;
					break;
				}
				if(j==ch.size()-1) n=ch.size();
				num*=10;
				num+=ch[j]-'0';
			}
			if(ch[n]>='a'&&ch[n]<='z'){
				if(num==0) num=1;
				a-=num,i=n,c=ch[n];
			}else b+=num,i=n-1;
			num=0;
		}else if(ch[i]=='-'){
			int n;
			for(int j=i+1;j<ch.size();j++){
				if(!(ch[j]>='0'&&ch[j]<='9')){
					n=j;
					break;
				}
				if(j==ch.size()-1) n=ch.size();
				num*=10;
				num+=ch[j]-'0';
			}
			num*=-1;
			if(num==0) num=-1;
			if(ch[n]>='a'&&ch[n]<='z') a-=num,i=n,c=ch[n];
			else b+=num,i=n-1;
			num=0;
		}
	}
	cout<<c<<"=";
	if(b==0) cout<<"0.000";
	else printf("%.3f",b*1.0/a*1.0);
	return 0;
}
2025/1/12 11:22
加载中...