getchar

cin.get(),cin.getline(),getline(),gets(),getchar()

我只是一个虾纸丫 提交于 2020-02-13 04:03:02
1.cin.get() (1).cin.get()-------提取单个字符,可以提取 回车 、空格 a=cin.get(); (2) 同(1)---------------提取单个字符,可以提取 回车 、空格 cin.get(a); (3).------------------- 不提取 回车 cin.get(字符数组,字符个数n,终止字符);//终止字符可以不写,默认为'\n' 或cin.get(字符指针,字符个数n,终止字符);//终止字符可以不写,默认为'\n' 不可跳过终止符号。需把回车'\n'提取掉 可以写成 cin.get(a,20); cin.get(); 也可以组合写成 cin.get(a,20).get(); 2.cin.getline()//---不提取 回车 cin.getline(字符数组 /字符指针,字符个数n,终止标志字符);//终止字符可以不写,默认为'\n' 可跳过终止符号。 即每次读取一整行并把由Enter键生成的换行符抛弃 返回值:此处还待研究,求大神指导。 3.getline()---------- - 用于 string 字符串的。 getline() // 接受一个字符串,可以接收空格并输出,需包含“ #include<string> ” #include<iostream> #include<string> using

2019-2020nowcoder牛客寒假基础4

北城余情 提交于 2020-02-12 14:48:53
A欧几里得 1 0 2 1 3 2 第一个数字是上一行数字的和,第二个数字是上一行数字第一个数字 #include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #include <cstring> #include <queue> #include <set> #include <map> #include <stack> using namespace std; #define scd(a) scanf("%d",&a) #define scdd(a,b) scanf("%d%d",&a,&b) #define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c) #define scl(a) scanf("%lld",&a) #define scll(a,b) scanf("%lld%lld",&a,&b) #define sclll(a,b,c) scanf("%lld%lld%lld",&a,&b,&c) #define prl(a) printf("%lld\n",a) #define prd(a) printf("%d\n",a) #define prf(a) printf("%lf\n",a) #define ptd(a) printf("%d ",a)

AtCoder AGC035D Add and Remove (状压DP)

懵懂的女人 提交于 2020-02-12 01:43:20
题目链接 https://atcoder.jp/contests/agc035/tasks/agc035_d 题解 想了两小时憋出来一个状压DP,发现人家怎么空间才十几MB,原来暴力就行了。。。 考虑原序列那个操作,我们可以建一个图,一开始有 \(n\) 个点没有边,每次选一个点向其左右未被选的点加两条边,一个点的贡献次数就是它到左右两个终点的路径数。 那么我们可以枚举最后选的点,把原序列分裂成两个区间,因此使用区间DP. 现在的问题是我们需要方便地统计一个点对总和的贡献。我们观察到,从 \([l,r]\) 这一层到 \([1,n]\) 最底层,每次要么拓展左边(左端点 \(l\) 连向新的 \(l'\) , \(r\) 连向 \(l'\) ),要么拓展右边,这样总共的过程可以表达为一个长度不超过 \((n-1)\) 的 01 串,且从 \(l\) 或 \(r\) 到达 \(1\) 或 \(n\) 的方案数可由这个串得到(具体地,维护两个变量 \(x=1,y=1\) , 拓展左边时 \((x,y)\rightarrow (x+y,y)\) , 拓展右边时 \((x,y)\rightarrow (x,x+y)\) )。那么预处理每个 01 串对应的系数,就可以快速计算了。最终的DP状态是, \(f[l][r][k][S]\) 表示区间 \([l,r]\) , 01 串长度为 \(k\

【c语言】清空缓存 的问题

拥有回忆 提交于 2020-02-12 00:27:25
清空stdin中的缓存 int c; while((c = getchar()) != EOF && c != '\n'); 会把缓存清空,但是会遗留下'\n' (10) 读取时,可以使用 scanf("%[^\n]",c);来空过\n。 或 scanf("\n%d",c); 失败的解决方案: 1, while(!feof(stdin)){   getchar(); } 结果:程序会卡在这段,永远出不了while循环。 因为feof(FILE* file )函数必须等下一次读取不到数据使,才会返回非0;如读取空文件时,直接用feof(file)返回的是0,而用一下 fread()函数后,虽然什么都没有读到,但是feof(file)就返回非0了; 所以就会造成虽然到了结尾了,但是feof(stdin)返回的还是0,然后程序就会卡在getchar(),等待输入。 2, fflush(stdin); 使用后无效,查了一下,此函数不是标准函数,VC编译器可以使用,但是其他的编译器如gcc是不支持的(注:fflush(stdout)是标准函数) 3, while((c = getchar()) != EOF && c != '\n');此时缓冲区第一个字符是'\n'。 scanf("%*[\n]%d",c); 此时c读取的是\n,没有读到后面的输入,导致程序错误。 没想明白为什么,%【\n

Codeforces Round #618 (Div. 2)

时光总嘲笑我的痴心妄想 提交于 2020-02-11 21:23:53
A. Non-zero 题意:给一串数字,每次可以对一个数字+1,问最少多少次操作之后所有数的和和乘积均不为0。 思路:乘积更容易处理,只要所有数字非0即可,于是对所有0(可以没有)操作一次,然后如果当前数字和不为0,则结束,为0,则对一个非负数操作一次(必然存在)。 代码中特判了全为-1的情况,事实上毫无意义,因为全为-1的情况在前面就会背判断掉。 1 #include<bits/stdc++.h> 2 #define LL long long 3 #define dl double 4 void rd(int &x){ 5 x=0;int f=1;char ch=getchar(); 6 while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} 7 while(ch<='9' && ch>='0')x=x*10+ch-'0',ch=getchar();x*=f; 8 } 9 void lrd(LL &x){ 10 x=0;int f=1;char ch=getchar(); 11 while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} 12 while(ch<='9' && ch>='0')x=x*10+ch-'0',ch=getchar();x*=f; 13 } 14

树状数组模板--Color the ball

倾然丶 夕夏残阳落幕 提交于 2020-02-10 22:39:48
Color the ball HDU - 1556 N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗? Input 每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。 当N = 0,输入结束。 Output 每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。 Sample Input 1 3 2 1 1 3 2 2 4 3 3 5 3 6 1 1 7 1 2 8 1 3 9 0 Sample Output 1 1 1 3 2 1 思路不难,就是线段树||差分数组||普通树状数组||树状数组+差分的模板题 每次更新时区间各点+1,最后输出每个元素的值,总结来说就是 区间更新+单点查询 TLE版本,单点修改,肯定超时,因为需要每次遍历左端点到右端点去更新,无法保持O(logn)的时间复杂度 普通正解:update数组表示从1到x每个数 更新的次数 ,所以我们只需要update(L-1,-1)和update(R,1)表示[L,R]被更新的次数,相当于将

Educational Codeforces Round 76 (Rated for Div. 2)

筅森魡賤 提交于 2020-02-09 20:46:36
A. Two Rival Students (CF 1257 A) 题目大意 有 \(n\) 个学生,给定两个学生的初始站位,可以交换最多 \(k\) 次相邻学生位置,要求那两个学生相距最远,问该距离是多少? 解题思路 移到边边就好了。 神奇的代码 #include <bits/stdc++.h> #define MIN(a,b) ((((a)<(b)?(a):(b)))) #define MAX(a,b) ((((a)>(b)?(a):(b)))) #define ABS(a) ((((a)>0?(a):-(a)))) using namespace std; typedef long long LL; typedef vector<int> VI; typedef pair<int,int> PII; typedef vector<PII> VPII; typedef vector<LL> VL; typedef pair<LL,LL> PLL; typedef vector<PLL> VPLL; template <typename T> void read(T &x) { int s = 0, c = getchar(); x = 0; while (isspace(c)) c = getchar(); if (c == 45) s = 1, c = getchar();

C语言的puts(),gets(),putchar(),getchar()

穿精又带淫゛_ 提交于 2020-02-09 19:05:02
其实puts(),gets()属于字符串输入函数。 putchar()与getchar()属于字符输入函数。 1.字符函数 #include<stdio.h> int main(){ char c; printf(“请输入一个字符:”); c=getchar(); putchar(c); return 0; }  输出结果如下:记住下面输出的虽然是数字,本质上是字符。 2.字符串函数 #include<stdio.h> int main(){ char str[20]; printf("请输入一组长度不长于20的字符串:"); gets(str); puts(str); return 0; } 3.因为上面都是单次输入,所以不用考虑回车符滞留在内存所带来的错误,下面带来由于for循环带来的回车符所引起的错误: #include<stdio.h> int main() { int i = 0; for (i = 0; i < 200; i++) { printf("请输入一个字符:"); char c = getchar(); putchar(c); printf("\n"); } return 0; } 你会发现虽然输出了正确结果,但是会多输出一个空白的,其实这个的就是回车。你第一次输入的时候输了一个字符‘2’,而且按了一下回车,所以此时你存入内存存了这两个字符,但是getchar

2019-2020nowcoder牛客寒假基础3

爷,独闯天下 提交于 2020-02-09 17:14:45
本校大佬阿珂了的时候我还在模拟线段树,虽然还是在最后时间内卡进去了,基础不好呀,说明还是要不好高骛远了,见到数论就不想动不晓得是是自以为跟哪个学长学的,真想开口说自己也是一名数论选手。 A.牛牛的DRB迷宫I 简单DP,一个B点可以向下或者是向右做出贡献,其他只能一个方向,忘记取modwa+1,ce+1 #include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #include <cstring> #include <queue> #include <set> #include <map> #include <stack> using namespace std; #define scd(a) scanf("%d",&a) #define scdd(a,b) scanf("%d%d",&a,&b) #define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c) #define scl(a) scanf("%lld",&a) #define scll(a,b) scanf("%lld%lld",&a,&b) #define prl(a) printf("%lld\n",a) #define prd(a) printf("%d\n",a) #define prf(a

2020牛客寒假算法基础集训营3

两盒软妹~` 提交于 2020-02-08 22:25:45
B.牛牛的DRB迷宫II 题解 看到构造题就傻眼了,当时脑子一直在想组合数的方法..... 事后问了学长,由于这是一个方案叠加,所以我们通过拆二进制的方法来解决这个问题 1 1 1 1 1 1 1 2 1 1 2 4 1 2 4 8 这个就是我们构造的2的幂的解。那么剩下的呢,举个例子吧,比如是11 1 1 1 1 1 1 1 1 2 3 1 1 2 4 3 1 2 4 8 11 因为语言难以描述,所以我就不描述了 学长说构造题拆二进制是常见思路,那我就先记下吧 #include<bits/stdc++.h> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)) typedef long long LL; typedef pair<int,int> PII; #define X first #define Y second 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*10+c-'0';c=getchar();} return x*f; } int x,len=1,dp[50][50],i,j,k; char a[52][52