博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5238-整数校验器-洛谷3月赛gg祭
阅读量:4708 次
发布时间:2019-06-10

本文共 2792 字,大约阅读时间需要 9 分钟。

 

题目描述

有些时候需要解决这样一类问题:判断一个数 x是否合法。

x合法当且仅当其满足如下条件:

  • x格式合法,一个格式合法的整数要么是 0,要么由一个可加可不加的负号,一个 19 之间的数字,和若干个 0 到 9 之间的数字依次连接而成。
  • x在区间 [l,r] 范围内(即 l≤x≤r)。

你需要实现这样一个校验器,对于给定的 l,r,多次判断 x是否合法。

输入输出格式

输入格式:

 

第一行三个整数 l,r,T,表示校验器的校验区间为 [l,r]以及需要校验的 x 的个数。

接下来 T行,每行一个 x,表示要校验的数,保证 x长度至少为 1且仅由 '0'~'9' 及 '-' 构成,且 '-' 只会出现在第一个字符。

 

输出格式:

 

输出共 T 行,每行一个整数,表示每个 xx 的校验结果。

校验结果规定如下:0表示 x 合法;1 表示 x 格式不合法;2 表示 x 格式合法且不在 [l,r] 区间内。

 

输入输出样例

输入样例#1:
-3 3 4000-0100000000000000000000
输出样例#1:
0112

说明

对于 100% 的数据,0T512,l,r64 位有符号整型范围内

保证输入文件大小不超过 128KB。数据在 linux 下生成,没有 '\r' 字符。

以下为部分特殊限制(互不包含):

  • 5%的数据,T=0
  • 25%的数据,保证 x 格式一定合法。
  • 30% 的数据,保证如果 x 格式合法,那么 x 一定在 64 位有符号整形范围内。

---------------------------------------------------------------------------------------------------------------------------------------------------

 这是一道很简单很简单很简单的模拟

只是要注意到的点有很多

(我真的真的都注意到了

但是由于dr太弱太弱了

(尤其是代码能力和debug精神)

于是dr就写乱了

啊啊啊啊啊啊

5分gg

(dr第一次参加乐多赛,不懂规则,提交多了,还扣了几分,就更可怜了)

注意注意注意啦!!!!!!

码风要好!!!!

不能太慌张!!!

多读题!!!!!

先理好思路在写!

多刷题!!!!!

-----------------------------------------------------------------------------------------------------------------

#include
using namespace std;typedef long long ll;ll l,r;int t;inline int read(){ int sum = 0,p = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') p = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { sum = sum * 10 + ch - '0'; ch = getchar(); } return p * sum;}int main(){ scanf("%lld%lld",&l,&r); t = read(); while(t--) { char qwq[1005]; cin>>(qwq + 1); int len = strlen(qwq+1); if(qwq[1] == '-') { if(qwq[2] == '0' ||len == 1) { printf("1\n"); continue; } } if(qwq[1] == '0' && len != 1) { printf("1\n"); continue; } if(qwq[1] == '-' && len > 20) { printf("2\n"); continue; } if(qwq[1] != '-' && len > 19) { printf("2\n"); continue; } unsigned long long ans = 0; ll cnt = 0; if(qwq[1] == '-') { sscanf(qwq+2,"%llu",&ans);//从字符串的第二位开始读,把后面的所有数字转换为一个unsigned long long类型变量tmp后再进行处理。 if(ans > (1LL<<63)) { printf("2\n"); continue; } cnt=-ans; } else { sscanf(qwq+1,"%llu",&ans); if (ans>=(1LL<<63)) { printf("2\n"); continue; } cnt=ans; } puts(cnt>=l && cnt<=r?"0":"2"); } return 0;}

用一下sstream里面的sscanf可以帮助简化代码

 

转载于:https://www.cnblogs.com/darlingroot/p/10463044.html

你可能感兴趣的文章
简单图片验证码
查看>>
Mac 修改Host 绑定host
查看>>
Python学习-23.Python中的函数——isinstance
查看>>
CF932F Escape Through Leaf 斜率优化、启发式合并
查看>>
jQuery获取同级元素
查看>>
移动端调试方法
查看>>
java虚拟机4.垃圾标记算法
查看>>
context.getResourceAsStream获取的是部署在服务器上面的文件位置 而不是我们本地的工程位置 意思是说获取的都是web下面的文件位置...
查看>>
usebean 使用语法
查看>>
jquery不能是使用普通的for循环 因为普通的for循环通过下表获取对象 如果通过下表获取对象的话 会转成dom对象...
查看>>
C#访问修饰符
查看>>
jmeter用Firefox录制https协议证书问题解决(转载)
查看>>
ABP 使用SwaggerUI汉化
查看>>
Performance Testing 系列
查看>>
C#程序在server 2003 运行错误的解决办法
查看>>
线性基
查看>>
查找表_leetcode349
查看>>
Spring框架碰壁日常更新
查看>>
【转】Python 30个实用小Tips
查看>>
JAVA利用poi获取world文件内容
查看>>