HDU6342 杭电多校第四场 Problem K. Expression in Memories 思维模拟

本篇介绍了一道关于构造合法算术表达式的编程题,主要内容包括如何判断并替换字符串中的问号以形成有效的数学表达式,涉及到字符串处理及表达式合法性验证。

Problem K. Expression in Memories

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 924    Accepted Submission(s): 354
Special Judge

 

Problem Description

Kazari remembered that she had an expression s0 before.
Definition of expression is given below in Backus–Naur form.
<expression> ::= <number> | <expression> <operator> <number>
<operator> ::= "+" | "*"
<number> ::= "0" | <non-zero-digit> <digits>
<digits> ::= "" | <digits> <digit>
<digit> ::= "0" | <non-zero-digit>
<non-zero-digit> ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
For example, `1*1+1`, `0+8+17` are valid expressions, while +1+1, +1*+1, 01+001 are not.
Though s0 has been lost in the past few years, it is still in her memories.
She remembers several corresponding characters while others are represented as question marks.
Could you help Kazari to find a possible valid expression s0 according to her memories, represented as s, by replacing each question mark in s with a character in 0123456789+* ?

 

 

Input

The first line of the input contains an integer T denoting the number of test cases.
Each test case consists of one line with a string s (1≤|s|≤500,∑|s|≤105).
It is guaranteed that each character of s will be in 0123456789+*? .

 

 

Output

For each test case, print a string s0 representing a possible valid expression.
If there are multiple answers, print any of them.
If it is impossible to find such an expression, print IMPOSSIBLE.

 

 

Sample Input

 

5 ????? 0+0+0 ?+*?? ?0+?0 ?0+0?

 

 

Sample Output

 

11111 0+0+0 IMPOSSIBLE 10+10 IMPOSSIBLE

 

 

Source

2018 Multi-University Training Contest 4

 

【题意】:给你一个字符串,问你能否构成一个合法的表达式,可以的话输出其中之一,不可以的话输出IMPOSSIBLE,表达式由数字,+,*组成

 

【思路】:可能最近脑子比较混,一道思维题,首先考虑能不能构成数字符号数字,再考虑有没有前导0的情况,比赛的时候思维十分混乱,一堆Bug.....

 

AC代码:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main ()
{
	int t;
	char s[509];
	scanf("%d",&t);
	while (t--){
		memset(s,0,sizeof(s));
		scanf("%s",s+1);
		int len = strlen(s+1);
		int vis = 0;
		if ((s[1] < '0' || s[1] > '9') && s[1] != '?') {
			printf("IMPOSSIBLE\n");
			continue;
		}
		if ((s[len] < '0' || s[len] > '9') && s[len] != '?') {
			printf("IMPOSSIBLE\n");
			continue;
		}
		if (((s[len-2] < '0' || s[len-2] > '9') && s[len-2] != '?')&&s[len-1] == '0'){
			printf("IMPOSSIBLE\n");
			continue;
		}
		if (s[1] == '0') vis = 1;
		if (s[1] == '?') s[1] = '1';
		int flag = 0;
		int k = 0;
		for (int i=  2; i <= len; i++){
			if (flag){
				if (s[i] == '0') vis = 1,flag = 0;
				else vis = 0,flag = 0;
				if ((s[i] < '0' || s[i] > '9') && s[i] != '?') {
					printf("IMPOSSIBLE\n");
					k = 1;
					break;
				}
				if (s[i] == '?'){
					s[i] = '1';
				}
				continue;
			}
			if (vis) {
				if (s[i] >= '0' && s[i] <= '9') {
					printf("IMPOSSIBLE\n");
					k = 1;
					break;
				}
				else if (s[i] == '?' && s[i+1] != '+' && s[i+1] != '*'){
					s[i] = '+';
					flag = 1;
					vis = 0;
				}
				else if (s[i] == '?' && (s[i+1] != '+' || s[i+1] != '*')){
					printf("IMPOSSIBLE\n");
					k = 1;
					break;
				}
				else vis = 0;
			}
			if ((s[i] < '0' || s[i] > '9') && s[i] != '?') {
				flag = 1;
			}
			else{
				flag = 0;
				if (s[i] == '?')
					s[i] = '1';
			}
		}
		if ((s[len] < '0' || s[len] > '9') && s[len] != '?') {
			printf("IMPOSSIBLE\n");
			continue;
		}
		if (!k){
			for (int i =1 ; i <= len; i++) printf("%c",s[i]);
			printf("\n");
		}
	}
}

 

源码地址: https://pan.quark.cn/s/44d07910d9c3 标题“PCBM_LP_Viewer_V2009”标识了一种专门服务于PCB焊盘构建的软件应用,其版本号记录为2009。 该软件的核心用途在于辅助用户依照IPC7351国际标准来构建精密的焊盘构造,从而保障电子设备的稳定运行与生产品质。 PCB焊盘在印制电路板(Printed Circuit Board)的设计环节中占据核心地位,它承担着将电子元件的引脚与电路板进行电气连接的任务,确保两者间的连接性能。 焊盘的构造规划对焊接成效及整个电路板的运作效能具有直接影响。 在PCBM LP Viewer V2009软件中,使用者能够借助前沿的工具与参数设定,对焊盘的形态、尺寸、间距等要素进行个性化定制,以适应不同元器件与实际应用场景的要求。 IPC7351是由国际电子互连技术协会颁布的一套规范体系,它为电子产品的焊盘构建提供了统一的准则。 该规范体系涉及焊盘的尺寸规格、形态样式、热管理效能、机械耐力等个维度,致力于提升焊盘的工作表现,减少生产过程中的瑕疵,增强电子产品在高温条件下的运行稳定性。 PCBM LP Viewer V2009软件严格遵循这一规范体系,使得设计人员能够便捷地构建出符合要求的焊盘,进而降低设计过程中的潜在风险,提高产品的整体质量。 操作PCBM LP Viewer V2009软件时,用户可以体验到以下特性:1. **图形化界面**:设计出直观且操作简便的界面,让焊盘设计流程更为顺畅。 2. **自定义参数**:能够根据元器件的具体规格对焊盘的尺寸、形态及孔径等参数进行灵活调整。 3. **自动计算**:软件能够自动核算出最优的焊盘尺寸,并按照IPC7351标准进行优化处理。 4. **...
代码下载地址: https://pan.quark.cn/s/5c2ff67041b8 在Android应用构建过程中,ListView被广泛采用作为一个展示大量数据条目的控件。 该控件具备出色的数据滚动处理能力,能够依据可用屏幕空间进行视图的动态加载与回收,以此实现内存的有效节省。 本文将详细阐述在Android平台如何构建一个ListView,并展示如何使其包含种不同规格的条目。 1. **ListView的构成框架** ListView由一系列视图(条目)构成,每个视图对应数据集中的单个数据项。 这些条目通过适配器进行连接,适配器负责建立数据与视图的联系,并决定数据在ListView中的呈现方式。 2. **适配器的设计** 在Android系统里,通常选用BaseAdapter或者诸如ArrayAdapter、CursorAdapter等预设适配器来为ListView提供适配服务。 适配器需要重新设计以下功能: - `getCount()`: 返回ListView中包含的条目总数。 - `getItem(int position)`: 根据指定位置提取数据对象。 - `getItemId(int position)`: 获取指定位置条目的唯一标识符,一般返回位置索引值。 - `getView(int position, View convertView, ViewGroup parent)`: 为ListView生成或复用条目视图。 这是适配器的关键部分,依据数据对象和可复用的视图来填充条目内容。 3. **定制化适配器** 当ListView需要展示种格式条目时,可以设计专属的适配器。 在`getView()`方法中,依据数据类型返回不同的视图样式。 可以通过检查数据对...
源码地址: https://pan.quark.cn/s/db95d26ecc9b “图书管理(借阅)”小程序作为一个入门级项目,主要运用C#编程语言进行开发,通过整合tabControl控件,致力于构建一个基础的图书管理平台,其核心功能在于图书信息的维护以及借阅流程的处理。 对于希望掌握C#及Windows应用程序开发的初学者而言,该项目提供了一个理想的实践环境。 在C#开发环境中,tabControl被视作一种常见的界面组件,它赋予了用户在不同标签页间切换以组织与展示信息的能力。 在此图书管理应用中,tabControl或许被用于划分不同的功能模块,诸如“图书目录”、“借阅详情”和“用户档案”等,使用者借此能够便捷地在各项功能间切换操作。 图书管理系统的数据管理通常依赖于数据库技术。 依据描述,该应用内含数据库文件,但作者指出“运行时需自行添加”,暗示数据库可能并未与项目原生集成,使用者必须手动进行配置或导入数据库方可正常运行。 数据库的构建可能包含书籍资料表(涵盖书名、作者、出版社、存量等字段)、借阅记录表(涉及借阅者、借阅时段、归还时段等字段)以及用户资料表(包含用户名、密码、联络方式等字段)。 在现实中的图书管理平台,为了完成借阅操作,开发者需设计逻辑以处理以下任务:1. **新增/修改书籍信息**:赋予管理员录入新书籍资料或更新现有书籍详情的权限。 2. **检索书籍**:使用者可依据书名、作者等条件查询书籍。 3. **执行借阅**:用户选择借书时,系统将核查库存,并修正借阅记录,同步减少相应书籍的存量。 4. **处理还书**:书籍归还时,系统将更新借阅记录并补充库存。 5. **用户账户管理**:涵盖注册、登录、调整个人资料等操作。 6. **权限管理**:区分普通...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值