hihocoder #1341 Constraint Checker

时间:2022-08-31 21:25:39

传送门

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

Given a set of constraints like 0<N<=M<=100 and values for all the variables, write a checker program to determine if the constraints are satisfied.

More precisely, the format of constraints is:

token op token op ... op token

where each token is either a constant integer or a variable represented by a capital letter and each op is either less-than ( < ) or less-than-or-equal-to ( <= ).

输入

The first line contains an integer N, the number of constraints. (1 ≤ N ≤ 20)

Each of the following N lines contains a constraint in the previous mentioned format.

Then follows an integer T, the number of assignments to check. (1 ≤ T ≤ 50)

Each assignment occupies K lines where K is the number of variables in the constraints.

Each line contains a capital letter and an integer, representing a variable and its value.

It is guaranteed that:

1. Every token in the constraints is either an integer from 0 to 1000000 or an variable represented by a capital letter from 'A' to 'Z'.

2. There is no space in the constraints.

3. In each assignment every variable appears exactly once and its value is from 0 to 1000000.

输出

For each assignment output Yes or No indicating if the constraints are satisfied.

样例输入
2
A<B<=E
3<=E<5
2
A 1
B 2
E 3
A 3
B 5
E 10 样例输出
Yes
No

比较简单的字符串处理题。写这篇是要记录下C++的istream类的用法。

朴素实现:

#include <bits/stdc++.h>
using namespace std; map<char,int> mp; string c[];
bool used[]; bool ok(int a, string &op, int b){
if(op=="<") return a<b;
return a<=b;
} int get_val(string &s, int &i){
int res=;
for(; s[i] && isdigit(s[i]) && !isalpha(s[i]); res*=, res+=s[i++]-'');
if(isalpha(s[i])) res=mp[s[i++]];
return res;
} string get_op(string &s, int &i){
string res;
for(; s[i] && ispunct(s[i]); res+=s[i++]);
return res;
} bool check(int n){
int a, b;
string op;
for(int i=; i<n; i++){
int j=;
a=get_val(c[i], j);
for(;;){
op=get_op(c[i], j);
if(op=="") break;
b=get_val(c[i], j);
if(!ok(a, op, b)) return false;
a=b;
}
}
return true;
} int main(){
int n, T;
cin>>n;
for(int i=; i<n; i++){
cin>>c[i];
for(auto x:c[i])
if(isalpha(x)) used[x-'A']=true;
}
int nv=;
for(int i=; i<; i++) nv+=used[i]; for(cin>>T; T--; ){
for(int i=; i<nv; i++){
char x;
int v;
cin>>x>>v;
mp[x]=v;
}
puts(check(n)?"Yes":"No");
}
}
借助stringstream类的实现:
#include <bits/stdc++.h>
using namespace std; map<char,int> mp; string c[];
bool used[]; int get_val(stringstream &x){
int res;
char v;
x>>res;
if(x.fail()){ //check whether badbit or failbit is set
//When an istream object turns fail, it stops working until flags reset
x.clear(); //new
x.get(v), res=mp[v];
}
return res;
} string get_op(stringstream &x){
char v;
string res;
if(x.str().empty()) return res;
for(;;){
x.get(v);
if(ispunct(v)) res+=v;
else{
x.putback(v);
return res;
}
}
} bool ok(int a, string &op, int b){
if(op=="<") return a<b;
return a<=b;
} bool check(int n){
int a, b;
string op;
stringstream x;
for(int i=; i<n; i++){
x.str(c[i]);
x.clear(); //error-prone, new
a=get_val(x);
for(;;){
op=get_op(x);
if(op=="") break;
b=get_val(x);
if(!ok(a, op, b)) return false;
a=b;
}
}
return true;
} // Input stream objects can read and interpret input from sequences of characters.
// Specific members are provided to perform
// these input operations. The standard object cin is an object of this type. int main(){
int n, T;
cin>>n;
for(int i=; i<n; i++){
cin>>c[i];
for(auto x:c[i])
if(isalpha(x)) used[x-'A']=true;
}
int nv=;
for(int i=; i<; i++) nv+=used[i]; for(cin>>T; T--; ){
for(int i=; i<nv; i++){
char x;
int v;
cin>>x>>v;
mp[x]=v;
}
puts(check(n)?"Yes":"No");
}
}

这里系统介绍一下C++的Stream I/O. (以下内容来自 The C++ Programming Language 4th Ed. by Bjarne Stroustrup, 38 I/O Streams).

  • The I/O stream library provides formatted and unformatted buffered I/O of text and numeric values. The definitions for I/O stream facilities are found in <istream>, <ostream>, etc.;
  • An istream converts a stream of characters (bytes) to typed objects:

Byte sequences --> stream buffer --> istream --> typed values

An iostream is a stream that can act as both an istream and an ostream. You need stream buffers (streambufs) to define a mapping from an iostream to a new kind of device, file, or provide a new locale, you need a copy of the standard, a good systems manual, and examples of working code in addition to what is presented here.

The key components of the stream I/O system can be represented graphically like this:

    ios_base:           |-------------------------------------->|---------------------------------->locale: format information                   

locale independent format state        |              | 

    ^               |------> basic_streambuf<>: --------------------------------> real destination/source:

    I                |    buffering     |             

    I                |                | 

  basic_ios<>: ------------------------------------|             |--------------------------------> character buffer

locale dependent format state

  stream state

    ^

    |

    |

 basic_iostream<>:

formatting (<<, >>, etc.)

  setup/cleanup

The vertical arrows represent "derived from." The horizontal arrows represent "pointer to." The classes marked with <> are templates parameterized by a character type and containing a locale.

38.3 Error Handling

An iostream can be in one of four states, defined in basic_ios from <ios>:


Stream States


good()  The previous iostream operations succeeded

eof()     We hit end-of-input ("end-of-file")

fail()   Something unexpected hapened (e.g., we looked for a digit and found 'x')

bad()    Something unexpected and serious happened (e.g., disk read error)


Any operation attempted on a stream that is not in the good() state has no effect; it is a no-op. An iostream can be used as a condition. In that case, the condition is true (succeeds) if the state of the iostream is good().

38.4.4 Stream State

In <ios>, the standard library defines the base class ios_base defining most of the interface to a stream class.

The basic_ios class manages the state of a stream:

  • The mapping between a stream and its buffers
  • The formatting options
  • The use of locales
  • Error handling
  • Connections to other streams and stdio

It might be the most complicated class in the standard library.


ios_base Stream State iostate Member Constants


badbit  Something unexpected and serious happened (e.g., a disk read error)

failbit  Something unexpected hppened (e.g., we looked for a digit and found 'x')

eofbit  We hit end-of-input (e.g., end-of-file)

goodbit All is well


Functions for reading these bits (good(), fail(), etc.) in a stream are provided by basic_ios.

														
		

hihocoder #1341 Constraint Checker的更多相关文章

  1. hihocoder 1341 Constraint Checker【string】

    hihocoder 1341 解释:这道题题目还是比较容易理解,就是根据输入的若干个不等式,校验后面输入的数据是否都满足前面的不等式,满足就输出Yes,只要有一个不满足就输出No.如“A<B&l ...

  2. 异常&colon;java&period;lang&period;LinkageError&colon; loader constraint violation&colon; when resolving interface method

    异常:java.lang.LinkageError: loader constraint violation: when resolving interface method "javax. ...

  3. hihocoder -1121-二分图的判定

    hihocoder -1121-二分图的判定 1121 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Net ...

  4. Hihocoder 太阁最新面经算法竞赛18

    Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...

  5. hihoCoder太阁最新面经算法竞赛15

    hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...

  6. 【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II

    http://hihocoder.com/problemset/problem/1454 调了好长时间,谜之WA... 等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻ #include& ...

  7. 【hihocoder&num;1413】Rikka with String 后缀自动机 &plus; 差分

    搞了一上午+接近一下午这个题,然后被屠了个稀烂,默默仰慕一晚上学会SAM的以及半天4道SAM的hxy大爷. 题目链接:http://hihocoder.com/problemset/problem/1 ...

  8. 【hihoCoder】1148:2月29日

    问题:http://hihocoder.com/problemset/problem/1148 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 思路: 1. 将问题转换成求两个日 ...

  9. 【hihoCoder】1288 &colon; Font Size

    题目:http://hihocoder.com/problemset/problem/1288 手机屏幕大小为 W(宽) * H(长),一篇文章有N段,每段有ai个字,要求使得该文章占用的页数不超过P ...

随机推荐

  1. ilbc编解码

    针对国内的博客或者技术论坛对 ILBC的论述都是把文章抄来抄去, 本人在此对 ILBC的具体代码实现详细列出代码. ILBC是由Global IP Sound公司提出的一种专为包交换网络通信设计的编解 ...

  2. 互联网扫描器 ZMap 完全手册

    初识 ZMap ZMap被设计用来针对整个IPv4地址空间或其中的大部分实施综合扫描的工具.ZMap是研究者手中的利器,但在运行ZMap时,请注意,您很有 可能正在以每秒140万个包的速度扫描整个IP ...

  3. 实现ModelDriver接口的功能

    ModelDriver接口 来自com.opensymphony.xwork2.ModelDriven.是xwork-2.1.2-750.jar包的东西. 下面是源码: package com.ope ...

  4. Git 和 Github的关系

    惭愧,这个问题到昨天才弄明白! Git 其实是一种版本控制的协议,和SVN/CVS类似,git协议定义了一个版本控制相关的各个操作,和SVN/CVS不同的是,git采用的是分布式的方法,并不需要服务器 ...

  5. Nancy简单实战之NancyMusicStore&lpar;三&rpar;:完善商品信息与管理

    前言 上一篇,我们做了不少准备,并且还把我们NancyFx音乐商城的首页打造好了.这一篇主要是完善我们在首页的商品浏览问题和添加对商品的管理. 下面开始正题: 商品详情 首先是查看单个商品的详情: 先 ...

  6. springboot~添加新模块的方法

    在springboot项目框架里,把一个项目两大模块,主项目main和测试项目test,而我们的测试项目根据功能又可以再分,比如可以有单元测试,集成测试,业务测试等等. 对于一个初学者来说,建立模块的 ...

  7. 【NodeJS】基础知识

    nodejs基础 nodejs允许自己封装模块,使得编写程序可以模块化,便于维护整理.在一个js文件中写完封装的函数或对象后,可以使用exports或module.exports来将模块中的函数暴露给 ...

  8. Resharper插件的使用

    一.Resharper设置 1.1 智能提示 安装完毕后,IDE 的智能提示(Intellisense)便会默认使用 Resharper 的提示,不知道为什么,我一直不太喜欢它的提示.改过来,是在Op ...

  9. 绕过D盾的一句话

    一个很简单的一个技巧,作个笔记,可以绕过D盾检测. 新建test1.php <?php eval($_POST[g]); ?> 新建test2.php <?php $a=" ...

  10. CURL的学习和应用

    curl安装: xp下面的安装 :修改php.ini文件的设置,找到php_curl.dll //取消下在的注释extension=php_curl.dll linux下面安装: # wget htt ...