模拟/字符串处理 UVALive 6833 Miscalculatio

题目传送门

  1 /*
  2     模拟/字符串处理:主要是对*的处理,先把乘的预处理后再用加法,比如说是:1+2*3+4 = 1+..6+4 = 11
  3 */
  4 #include <cstdio>
  5 #include <algorithm>
  6 #include <cstring>
  7 #include <string>
  8 #include <cmath>
  9 #include <vector>
 10 #include <map>
 11 #include <queue>
 12 using namespace std;
 13
 14 typedef long long ll;
 15 const int MAXN = 1e2 + 10;
 16 const int INF = 0x3f3f3f3f;
 17 char s[MAXN];
 18 int len;
 19
 20 void solve(void)
 21 {
 22     int p1 = 0, p2 = 0;
 23     for (int i=1; i<=len; ++i)
 24     {
 25         if (s[i] == ‘*‘)
 26         {
 27             p1 = p2 = i;
 28             while (p1 >= 1 && s[p1] != ‘+‘)    p1--;    p1++;
 29             while (p2 <= len && s[p2] != ‘+‘)    p2++;    p2--;
 30             ll tmp = 0;
 31             for (int j=p1; j<=p2; j+=2)
 32             {
 33                 if (j == p1)    tmp = s[j] - ‘0‘;
 34                 else    tmp = tmp * (s[j] - ‘0‘);
 35             }
 36 //            printf ("p1: %d p2: %d\ntmp: %d\n", p1, p2, tmp);
 37             int p = p2;
 38             while (tmp)
 39             {
 40                 s[p--] = tmp % 10 + ‘0‘;
 41                 tmp /= 10;
 42             }
 43             for (int j=p1; j<=p; ++j)    s[j] = ‘.‘;
 44         }
 45     }
 46 }
 47
 48 int main(void)        //UVALive 6833 Miscalculation
 49 {
 50 //    freopen ("B.in", "r", stdin);
 51
 52     while (scanf ("%s", s + 1) == 1)
 53     {
 54         ll y;    scanf ("%lld", &y);
 55         ll sum_l = 0, sum_m = 0;
 56
 57         len = strlen (s + 1);    char op;    int x = 0;
 58         for (int i=1; i<=len; ++i)
 59         {
 60             if (i & 1)
 61             {
 62                 if (i == 1)    sum_l = s[i] - ‘0‘;
 63                 else
 64                 {
 65                     if (op == ‘+‘)    sum_l += s[i] - ‘0‘;
 66                     else    sum_l = sum_l * (s[i] - ‘0‘);
 67                 }
 68             }
 69             else    op = s[i];
 70         }
 71
 72         solve ();
 73         for (int i=1; i<=len; ++i)
 74         {
 75             if (s[i] == ‘.‘ || s[i] == ‘+‘)    continue;
 76             else if (s[i] >= ‘0‘ && s[i] <= ‘9‘)
 77             {
 78                 ll res = 0;    int j;
 79                 for (j=i; j<=len; ++j)
 80                 {
 81                     if (s[j] == ‘+‘)    break;
 82                     res = res * 10 + (s[j] - ‘0‘);
 83                 }
 84                 sum_m += res;
 85                 i = j - 1;
 86             }
 87         }
 88
 89         if (y == sum_l && y == sum_m)    puts ("U");
 90         else if (y != sum_l && y != sum_m)    puts ("I");
 91         else
 92         {
 93             if (y == sum_l)    puts ("L");
 94             else    puts ("M");
 95         }
 96
 97 //        printf ("%s\n", s + 1);
 98 //        printf ("%lld %lld \n", sum_l, sum_m);
 99     }
100
101     return 0;
102 }
时间: 2024-10-02 02:05:04

模拟/字符串处理 UVALive 6833 Miscalculatio的相关文章

洛谷P1449 后缀表达式 栈 模拟 字符串

洛谷P1449 后缀表达式 栈 模拟 字符串 栈模拟一下 碰到 . 如果输入的是数字就把数字放进栈中 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <cstdlib> 5 #include <string> 6 #include <algorithm> 7 #include <iomanip> 8 #include <io

java基础知识回顾之---java String final类普通方法的应用之“模拟字符串Trim方法”

/* * 4,模拟一个trim功能一致的方法.去除字符串两端的空白  * 思路: * 1,定义两个变量. * 一个变量作为从头开始判断字符串空格的角标.不断++. * 一个变量作为从尾开始判断字符串空格的角标.不断--. * 2,判断到不是空格为止,取头尾之间的字符串即可. *  *  使用char charAt(int index);方法根据index索引,取出字符串 *  使用String substring(int beginIndex, int endIndex)//包含begin 不包

POJ 1016 模拟字符串

Numbers That Count Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20396   Accepted: 6817 Description "Kronecker's Knumbers" is a little company that manufactures plastic digits for use in signs (theater marquees, gas station price

Codeforces Round #297 (Div. 2)(模拟+字符串+排序)

A. 题目链接:点击打开链接 解题思路: 大意就是说奇数位给小写字母,偶数位给大写字母,然后小写对应钥匙,大写对应门,问最少消耗几把钥匙能打开所有门. 简单模拟即可,初始化一个英文字母数组,如果遇到小写字母,我们把相应的计数器++,遇到大写,如果它对应的数组值不为0,那么我们将其--, 否则购买一把钥匙. 完整代码: #include <iostream> #include <cstdio> #include <algorithm> #include <cstri

[模拟,字符串处理]7-7 翻转单词顺序 (20分)

给定一个字符串,翻转该字符串,翻转时单词中的字符顺序不变.例如,如果字符串为"Hello World",则翻转后为"World Hello".单词间以一个或多个空格分隔.注意,字符串开头和结尾都可能有多个空格. 输入格式: 输入可能包括多行.每行代表一个字符串,除了空格外,标点符号和普通字母一样处理.你可以认为一行的字符总数不会超过50000个,单词数不会超过600,每个单词的长度也不会超过30. 输出格式: 输出包括多行,每行对应输入的一行,为翻转后的字符串. 输

模拟实现常用字符串函数

1.查找子字符串函数strstr的实现 char *  my_strstr(const char * dest, const char * src)//const保护字符串不被更改 { assert(dest); assert(src);     //断言 char * ptr1 = NULL; char * ptr2 = src; while (*dest) { ptr1 = dest;//保留匹配成功后的位置指针 src = ptr2;//保留匹配失败后,字串的同样指针 while (*de

字符串与字符串函数

定义字符串的方法:1.字符串常量2.char数组 //这种方法数组名会看作首元素的地址的同义词,不可用++,增量运算符只能用于变量名前. 2.可以用*(head+1)这种格式 3.数组元素是变量,数组名是地址常量3.cahr指针 //是一个指针,是变量4.字符串数组 举例:char character[23]= "fsdfdsf" "sdfdf";这是可以的 //把字符串看作指针#include<stdio.h>int main(void){ print

字符串的基本操作,初始化和赋值之类的区别,和数据名是一个常量指针不可以改变和赋值(盲点众多)

#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> //一级指针的典型用法 //数组 int a[10] //字符串 //1 C语言的字符串 以零结尾的字符串 //2 在C语言中没有字符串类型 通过字符数组 来模拟字符串 //3 字符串的内存分配 堆上 栈上 全局区 (很重要) //字符数组 初始化 void main51() { //1 指

C语言中的字符串

1.从概念上讲,C语言中没有字符串数据类型 2.在C语言中使用字符数组来模拟字符串 3.C语言中的字符串是以'\0'结束的字符数组 4.C语言中的字符串可以分配于栈空间,堆空间或者只读存储区 5.字符串的长度就是字符串所包含字符的个数 6.C语言中的字符串长度指的是第一个'\0'字符前出现的字符个数 7.C语言中通过'\0'结束符来确定字符串的长度 注意: strlen返回数为无符号数,两个无符号数相减依然为无符号数. 1.一般情况下,千万不要自行编写C标注库已经提供的函数 2.标准库有时会使用