getchar

SDOI2017相关分析

天涯浪子 提交于 2020-03-18 17:42:14
一道线段树水题 注意别被卡精度(无时无刻都要想着强制转换double) 居然写了 \(100min\) ,我太弱了!!! #include<bits/stdc++.h> using namespace std; inline int read(){ int x=0,f=1;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();} return f==1?x:-x; } const int N=1e5+4; #define lc (p<<1) #define rc (p<<1|1) int n,m,a[N],b[N]; double t[N<<2],tx[N<<2],dx[N<<2],dy[N<<2],lzmx[N<<2],lzmy[N<<2],lzcx[N<<2],lzcy[N<<2]; double ans,anx,ax,ay; inline void pushup(int p){ t[p]=t[lc]+t[rc]; tx[p]=tx[lc]+tx[rc]; dx[p]=dx[lc]+dx[rc]; dy[p]=dy[lc]+dy[rc]; } inline void pushmo(int p

编译原理DFA(有限确定自动机)的构造

ε祈祈猫儿з 提交于 2020-03-18 06:49:57
CODE: https://github.com/pxjw/Principles-of-Compiler/tree/master/consDFA 原题: 1、自己定义一个简单语言或者一个右线性正规文法 示例如( 仅供参考 ) G[S]:S→aU|bV U→bV|aQ V→aU|bQ Q→aQ|bQ|e 2、构造其有穷确定自动机,如 3、利用有穷确定自动机M=(K,Σ,f, S,Z)行为模拟程序算法,来对于任意给定的串,若属于该语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是” K:=S; c:=getchar; while c<>eof do {K:=f(K,c); c:=getchar; }; if K is in Z then return (‘yes’) else return (‘no’) 开始编程! 1.状态转换式构造类: current——当前状态 next——下一状态 class TransTile { public: char current; char next; char input; TransTile(char C,char I,char Ne){ current = C; next = Ne; input = I; } }; 2.DFA的构造类 此处包括DFA的数据集,字母表,以及过程P的定义。 包括了初始化,遍历转换

个人作业

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-16 02:44:47
1、github链接:https://github.com/asligia/hzxxiaoxiu/blob/master/wc.cpp 2、预计开发时间&实际开发时间 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 10 20 · Estimate · 估计这个任务需要多少时间 20 20 Development 开发 120 150 · Analysis · 需求分析 (包括学习新技术) 20 30 · Design Spec · 生成设计文档 10 10 · Design Review · 设计复审 (和同事审核设计文档) 10 10 · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10 · Design · 具体设计 30 30 · Coding · 具体编码 30 25 · Code Review · 代码复审 10 10 · Test · 测试(自我测试,修改代码,提交修改) 30 30 Reporting 报告 20 20 · Test Report · 测试报告 20 20 · Size Measurement · 计算工作量 10 10 · Postmortem & Process Improvement Plan · 事后总结,

[置顶]
读入优化&输出优化

流过昼夜 提交于 2020-03-15 19:43:35
注意了注意了注意了,重要的事情说3遍,这个东西是骗分神器,骗分神器,骗分神器!!! 众所周知:scanf比cin快得多,printf比cout快得多,如果你不知道就……就现在知道了 那有没有更快的呢?当然。 请看: 我懵逼了,至于慢近100ms吗? 好吧,这就是读入优化的效果,在数据很恐怖的情况下能比scanf多过1-5个点…… 比如说这种: 都说了要读入优化你还不读入优化,那不是找死吗…… 前面都是废话,现在开始说正事 读入优化 首先,读入优化这里是只是针对整数,getchar读字符是非常快的,所以我们就用getchar了。(下面都假设输入的数为x) 负数处理 很简单,用一个标志变量f,开始时为1,当读入了’-’时,f变为-1,最后 x*=f 即可 绝对值部分处理 显然getchar每次只能读一位,所以,每当读了一位时x*=10,为这一位“留位置”。 举个例子:现在读入了123,x为123,再读入了一个4,x*=10,变为了1230,现在它的最后一位空出来了,正好留给4,x+=4,x就变为了1234,当然,这里的’4’是char类型,需要减去’0’才是4,即: x=x*10+s-'0' (s为当前输入的字符) 关于细节 很多时候是有多余空格或者其他的乱码字符输入,为了防止bug,我们要严谨~详见代码。 代码 void read(int &x)//'&'表示引用

c++ 读入优化、输出优化模板

て烟熏妆下的殇ゞ 提交于 2020-03-15 19:43:18
  0. 在有些输入数据很多的变态题中,scanf会大大拖慢程序的时间,cin就更慢了,所以就出现了读入优化。其原理就是一个一个字符的读入,输出优化同理,主要使用getchar,putchar函数。   1. int型读入优化(long long的只要把x改成long long型即可): 1 #include<cctype> 2 inline int read() 3 { 4 int x=0,f=0; char ch=0; 5 while(!isdigit(ch)) {f|=ch=='-';ch=getchar();} 6 while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar(); 7 return f?-x:x; 8 }   2.double型读入优化: 1 inline double dbread() 2 { 3 double x=0,y=1.0; int f=0; char ch=0; 4 while(!isdigit(ch)) {f|=ch=='-';ch=getchar();} 5 while(isdigit(ch)) x=x*10+(ch^48),ch=getchar(); 6 ch=getchar(); 7 while(isdigit(ch)) x+=(y/=10)*(ch^48),ch=getchar(); 8

读入优化(快读)

孤街浪徒 提交于 2020-03-15 19:40:52
P.S. 其实还有输出优化,就是把数字的每一位依次输出。 ------------------------------------------------------------------ getchar()读入速度比scanf()快 可以根据实际情况设置读入方式,第一个while里的内容可以根据空格和换行符进行修改。 x*10 : (x<<3)+(x<<1) 正数和负数都可以: #include <bits/stdc++.h> inline void read(int &x) { bool f=0; char ch=getchar(); while (ch<'0' || ch>'9') f|=ch=='-',ch=getchar(); x=0; while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar(); if (f) x=-x; } int main() { int x; read(x); printf("%d",x); return 0; } 只有正数: 1 #include <bits/stdc++.h> 2 3 inline void read(int &x) 4 { 5 x=0; 6 char ch=getchar(); 7 while (ch<'0' || ch>'9') 8 ch=getchar(); 9 while

Codeforces Round #595 (Div. 3) 题解

依然范特西╮ 提交于 2020-03-15 12:55:37
前言 大家都在洛谷上去找原题吧,洛谷还是不错的qwq A 因为没有重复的数,我们只要将数据排序,比较两两之间有没有 \(a_j - a_i == 1 (j > i)\) 的,有则输出 \(2\) , 无则输出 \(1\) 普及T1难度 Code #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #define N 107 using namespace std; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); } return x * f; } int q,n,ans; int a[N]; void work() { memset(a, 0, sizeof(a)); n = read(); for(int i=1;i<=n;++i) a[i] = read(); sort(a+1, a+1+n); bool flag = 1; for(int i=1;i

CodeForces - 617E - XOR and Favorite Number(前缀和+莫队)

我们两清 提交于 2020-03-12 12:07:05
题目链接: https://vjudge.net/problem/CodeForces-617E 题目大意:问题就是给你一个序列,问你询问的区间之内异或和为k的连续区间的数量 如果给的n不大的话,我们可以先考虑前缀和,设a[ ]为区间异或和,如果a[l, r]的异或和等于k,那么a[r]^a[l-1]^k = a[l-1], 如果[1, 1]的异或和为k,那么a[1]^k就等于0,如果[1, 2]的异或和为k,那么a[2]^k等于0, 如果[1, 3]的异或和为k, 那么a[3]^k等 于0, 如果[2, 3]的异或和等于0呢?那它的异或和就等于a[1], 因为a[3]是[1, 3]的异或和, 如果[2, 3]异或k等于0, 那结果就[1, 1],也就是a[1] 但是光用前缀和肯定是不够的,这样的话复杂度会打到O(nm)所以说这时候就要套一个莫队算法了,另外有一个坑点是因为题目是异或所以int可能越界,注意开long long #include<set> #include<map> #include<list> #include<stack> #include<queue> #include<cmath> #include<cstdio> #include<cctype> #include<string> #include<vector> #include<climits>

学习笔记(带修主席树)

大城市里の小女人 提交于 2020-03-12 07:31:52
带修主席树 感谢YMY大佬非常非常详细的口糊和debug(v.) ,首先主席树是离线算法。 普通主席树是权值线段树,求区间里有几个数,就是用前缀和相减的方式。 其实带修主席树也大同小异。 算法实现 首先你需要离线所有的操作,主要是要将修改之后的值也离散进取 对于每次修改,用树状数组的方式每次加lowbit(),对每个点都insert一下。 对于每次询问,先开两个数组,将左右端点树状数组的跳的点都存下来,每次查询区间都用所用又端点减所有左端点,进左右子树时,也要将这些点换成左右子树。 洛谷 Dynamic Ranking #include<bits/stdc++.h> using namespace std; typedef int sign; typedef long long ll; #define For(i,a,b) for(register sign i=(sign)a;i<=(sign)b;++i) #define Fordown(i,a,b) for(register sign i=(sign)a;i>=(sign)b;--i) const int N=1e4+5; bool cmax(sign &a,sign b){return (a<b)?a=b,1:0;} bool cmin(sign &a,sign b){return (a>b)?a=b,1:0;}

关于scanf不能读入回车和空格

拥有回忆 提交于 2020-03-11 01:05:42
最近在OJ上编程时发现,scanf不能读入回车和空格两个字符,需要用getchar来读入,程序如下: #include<cstdio> #include<iostream> using namespace std; int main() { int n; char a,b; scanf("%d",&n); getchar(); //此处若是没有getchar,空格字符就赋给a for(int i=0;i<n;i++) { scanf("%c %c",&a,&b); getchar(); // printf("%c %c",a,b); } return 0; } 来源: CSDN 作者: 不要绝望总会慢慢变强 链接: https://blog.csdn.net/luoshiyong123/article/details/104784224