CF394A Counting Sticks

随便搞,设一开始等式 a+b=ca+b=c,显然 a+bc=2\left| a + b - c \right| = 2 时有解,然后判断是 c(a+b)=2c-(a+b)=2 还是 (a+b)c=2(a+b)-c=2,模拟即可。

代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <cmath>
using namespace std;

string s;
int cnt[5], now, nc = 0;

int main()
{
	cin >> s;
	s += '+';
	for (int i(0); i < s.size(); i++)
	{
		if (s[i] != '|')
		{
			cnt[++now] = nc;
			nc = 0;
		}
		else nc++;
	}
	int t = cnt[1] + cnt[2];
	if (cnt[1] + cnt[2] == cnt[3])
	{
		s.erase(--s.end());
		cout << s << endl;
		return 0;
	}
	if (abs(t - cnt[3]) != 2) printf("Impossible");
	else
	{
		if (cnt[3] - t == 2)
		{
			for (int i(1); i <= cnt[1] + 1; i++) printf("|");
			printf("+");
			for (int i(1); i <= cnt[2]; i++) printf("|");
			printf("=");
			for (int i(1); i < cnt[3]; i++) printf("|");
			puts("");
		}
		else
		{
			if (cnt[1] != 1)
			{
				for (int i(1); i < cnt[1]; i++) printf("|");
				printf("+");
				for (int i(1); i <= cnt[2]; i++) printf("|");
				printf("=");
				for (int i(1); i <= cnt[3] + 1; i++) printf("|");
				puts("");
			}
			else
			{
				for (int i(1); i <= cnt[1]; i++) printf("|");
				printf("+");
				for (int i(1); i < cnt[2]; i++) printf("|");
				printf("=");
				for (int i(1); i <= cnt[3] + 1; i++) printf("|");
				puts("");
			}
		}
	}
	return 0;
}
posted @   HappyBobb  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示