社区讨论

单哈希TLE求助

CF898FRestoring the Expression参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lyyc1ejl
此快照首次捕获于
2024/07/23 19:28
2 年前
此快照最后确认于
2024/07/23 20:34
2 年前
查看原帖
为什么会T,不理解。。。
CPP
#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;

string s;
ll n,p[100005],hx[100005];

void init(){
	for(ll i=1;i<=n;i++)
		hx[i]=hx[i-1]*10+(s[i]-'0');
	p[0]=1;
	for(ll i=1;i<=n;i++)
		p[i]=p[i-1]*10;
}

inline ll get(ll x,ll y){
	return hx[y]-hx[x-1]*p[y-x+1];
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	
	cin>>s;s='.'+s;n=s.size()-1;
	
	init();
	
//	while(1){
//		ll x,y;cin>>x>>y;
//		cout<<get(x,y)<<endl;
//	}
	
	for(ll k=1;n-k-k>=1;k++){
		if(get(1,k)+get(k+1,n-k)==get(n-k+1,n)){
			for(ll i=1;i<=k;i++)cout<<s[i];cout<<"+";
			for(ll i=k+1;i<=n-k;i++)cout<<s[i];cout<<"=";
			for(ll i=n-k+1;i<=n;i++)cout<<s[i];
			return 0;
		}
		if(get(1,k)+get(k+1,n-k-1)==get(n-k,n)){
			for(ll i=1;i<=k;i++)cout<<s[i];cout<<"+";
			for(ll i=k+1;i<=n-k-1;i++)cout<<s[i];cout<<"=";
			for(ll i=n-k;i<=n;i++)cout<<s[i];
			return 0;
		}
		
		if(get(1,n-2*k)+get(n-2*k+1,n-k)==get(n-k+1,n)){
			for(ll i=1;i<=n-2*k;i++)cout<<s[i];cout<<"+";
			for(ll i=n-2*k+1;i<=n-k;i++)cout<<s[i];cout<<"=";
			for(ll i=n-k+1;i<=n;i++)cout<<s[i];
			return 0;
		}
		if(get(1,n-2*k-1)+get(n-2*k,n-k-1)==get(n-k,n)){
			for(ll i=1;i<=n-2*k-1;i++)cout<<s[i];cout<<"+";
			for(ll i=n-2*k;i<=n-k-1;i++)cout<<s[i];cout<<"=";
			for(ll i=n-k;i<=n;i++)cout<<s[i];
			return 0;
		}
	}
	
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...