洛谷P5238 整数校验器
看到没有边读入边处理的,我来水一发
我们要看一下有那些情况是格式不合法的
单独的负号
-0(后面可以有其他数字)
0 +(后面一些数字)
我们用快速读入的方法
读取字符进行处理
还有可能超出范围的
考虑到l和r不超过20位
于是我们开一个cnt变量记录位数
如果cnt>20明显超出边界
否则按照快速读入的方法算出读入的数字
然后进行判断
要开一个至少能存储20位的整数类型,我使用了__int128
#include <bits/stdc++.h>
#define int long long
#define ll __int128
using namespace std;
int l, r;
int read() {
char c = getchar();
ll tmp = 0, f = 1, flag = 0, first_zero = 0, cnt = 0;
while(!isdigit(c)) { // 读入特殊字符
if(c == '-') {
if(f == -1) {
flag = 1; // 判断两个负号连在一起的情况(然而并没有)
}
f = -f;
} else {
if(c != '\n')flag = 1; // 出现了特殊情况(然而并不会有)
}
c = getchar();
if(c == '\n') return 1; // 单独的负号
}
// cout << flag << endl;
while(isdigit(c)) {
cnt++;
if(cnt == 1 && c == '0') first_zero = 1; // 第一次出现的数是0
if(cnt == 2 && first_zero) flag = 1; // 第一次出现的数是0,并且后面还有数,显然不合法
tmp = (tmp << 1) + (tmp << 3) + c - 48;
c = getchar();
}
if(tmp == 0 && f == -1 && cnt == 1) return 1; // 如果是-0,明显不合法
if(flag) return flag;
tmp *= f;
if(((cnt <= 20 && (tmp < l || tmp > r)) || cnt > 20) && !flag) return 2; // 超出边界
else return flag;
}
signed main() {
int t;
cin >> l >> r >> t;
while(t--) {
cout << read() << endl;
}
return 0;
} // qwq
洛谷P5238 整数校验器的更多相关文章
- 洛谷 P5238 整数校验器
题目描述 有些时候需要解决这样一类问题:判断一个数 x 是否合法. x 合法当且仅当其满足如下条件: x 格式合法,一个格式合法的整数要么是 0,要么由一个可加可不加的负号,一个 1 到 9 之间的数 ...
- P5238 整数校验器
题目地址:P5238 整数校验器 显然这道题不算难,细心即可AC 细节见代码中的注释 #include <bits/stdc++.h> #define ll long long using ...
- 洛谷4451 整数的lqp拆分(生成函数)
比较水的一题.居然是一道没看题解就会做的黑题…… 题目链接:洛谷 题目大意:定义一个长度为 $m$ 的正整数序列 $a$ 的价值为 $\prod f_{a_i}$.($f$ 是斐波那契数)对于每一个 ...
- LuoguP5238 整数校验器 题解
Content 给定两个整数 \(l,r\),再给定 \(T\) 个整数,请判断对于每个整数 \(x\),是否满足以下要求: \(x\in[l,r]\). \(x\) 格式合法. 数据范围:\(-2^ ...
- 洛谷 [P2146] 软件包管理器
树剖 将一个软件是否安装,看作是sum数组的0或1,对于每个操作前后sum[1]的变化,就是所求 #include <iostream> #include <cstdio> # ...
- 洛谷P4035 球形空间产生器 [JSOI2008] 高斯消元
正解:高斯消元 解题报告: 链接! 昂开始看到以为是,高斯消元板子题? 开始很容易想到的是,虽然是多维但是可以类比二维三维列出式子嘛 但是高斯消元是只能处理一元问题的啊,,,辣怎么处理呢 对的这就是这 ...
- 洛谷 - P2146 - 软件包管理器 - 重链剖分
https://www.luogu.org/problem/P2146 继续重链剖分. 这里好像很好懂,每次安装软件就区间改值赋值整个路径是1,然后比较前后的sum值变化就可以了.事实上后一次的sum ...
- 【算法学习】【洛谷】树链剖分 & P3384 【模板】树链剖分 P2146 软件包管理器
刚学的好玩算法,AC2题,非常开心. 其实很早就有教过,以前以为很难就没有学,现在发现其实很简单也很有用. 更重要的是我很好调试,两题都是几乎一遍过的. 介绍树链剖分前,先确保已经学会以下基本技巧: ...
- struts_23_xwork校验器列表使用例子
required 必填校验器 <field-validator type="required"> <message>性别不能为空!</message& ...
随机推荐
- js 阻止冒泡
$this.click(function(e){ e.stopPropagation(); });
- 关于java发送email
转载:https://blog.csdn.net/qq_32371887/article/details/72821291 1:使用JavaMail发送邮件 // 1.创建一个程序与邮件服务器会话对象 ...
- J - Borg Maze
J - Borg Maze 思路:bfs+最小生成树. #include<queue> #include<cstdio> #include<cstring> #in ...
- 香蕉派 Banana pi BPI-M2 四核开源单板计算机.
Banana PI BPI-M2 是一款四核高性能单板计算机,Banana PI BPI-M2是一款比树莓派更强悍的四核Android4.4产品. Banana PI BPI-M2兼容性强大,能 ...
- HDU 3709
真是跪了,一看范围就不会往枚举的方向想,没想到真用枚举加剪枝了...->——-> 解释一下代码中的上限: 例如4567,当枚举最高位时,很明显不能超过4,所以有上限,但当最高位为3以下时, ...
- 【SSH2框架(理论篇)】--SSH2 Vs 经典三层
这几天一直在学习使用SSH2框架.对于框架本身的使用并非非常困难.相信经过多锻炼就行熟练的掌握框架的使用,让我匪夷所思的是在使用框架的时候感觉非常熟悉,好像在哪里用过似得. 就在某次查看代码的时 ...
- 【树形DP】 HDU 2196 Computer
题意:求节点间的最大距离 先DFS一次 记录下 每一节点的子树下的最大距离(DP[ u ] [ 0 ])和第二大距离(DP[ u ] [ 1 ]) 用DP[ v ] [ 2 ] 表示由v的父节点来的最 ...
- comp.lang.javascript FAQ [zz]
comp.lang.javascript FAQ Version 32.2, Updated 2010-10-08, by Garrett Smith FAQ Notes 1 Meta-FAQ met ...
- 2015.05.15,外语,学习笔记-《Word Power Made Easy》 01 “如何讨论人格特点”
2015.03.17,外语,读书笔记-<Word Power Made Easy> 01 “如何讨论人格特点”学习笔记 SESSIONS 1 本来这些章节都是在一两年前学习的,现在趁给友人 ...
- 英语发音规则---M字母
英语发音规则---M字母 一.总结 一句话总结: 1.M发[m]音? monkey ['mʌŋkɪ] n. 猴子:顽童 come [kʌm] vi. 来 tomato [tə'mɑːtəʊ] n. 番 ...