scanf

树状数组 (模板)

对着背影说爱祢 提交于 2020-03-21 23:43:55
树状数组的一维和二维模板 模板 int lowbit(int x){ return x & (-x);}void modify(int x,int add)//一维{ while(x<=MAXN) { a[x]+=add; x+=lowbit(x); }}int get_sum(int x){ int ret=0; while(x!=0) { ret+=a[x]; x-=lowbit(x); } return ret;}void modify(int x,int y,int data)//二维{ for(int i=x;i<MAXN;i+=lowbit(i)) for(int j=y;j<MAXN;j+=lowbit(j)) a[i][j]+=data;}int get_sum(int x,int y){ int res=0; for(int i=x;i>0;i-=lowbit(i)) for(int j=y;j>0;j-=lowbit(j)) res+=a[i][j]; return res;} 倆道模板题 hdu1166 地兵布阵 一维: View Code #include<stdio.h>#include<string.h>#include<stdlib.h>int c[50011],n;int lowbit(int x)//计算lowbit{ return x&(-x);

5.20 c语言的第三节课

爱⌒轻易说出口 提交于 2020-03-21 12:58:57
这个是讲课之后才写的感想今天将的框架 1、今天仔细讲解了scanf的使用,格式控制的加字符和加逗号的区别。地址符一定要加上&。再输出字符的时候要严格的按照格式写,空格就算是一个字符。 2、再输入数值的时候,如果输入的是非法字符,代表的是这个输入的结束。 3、printf的使用,构成是格式控制和输出列表,注意和scanf的区别,加上的是变量名,而不是地址符。而scanf是地址符而不是变量名。 4、%m.nf代表的是占m列,包括小数点,精确到n位。 5、用程序举例说明%20.15f。 随想: 感觉今天上课比之前自信,但还是有点卡壳,但是敢大声说话了。等我把基础学号了,我就再练习说话的技巧。 来源: https://www.cnblogs.com/serious123/p/10896982.html

AtCoder Grand Contest 005题解

谁都会走 提交于 2020-03-21 04:53:50
传送门 \(A\) 咕咕 const int N=5e5+5; char s[N];int res,n,sum; int main(){ scanf("%s",s+1),res=n=strlen(s+1); fp(i,1,n)if(s[i]=='S')++sum; else if(sum)--sum,res-=2; printf("%d\n",res); return 0; } \(B\) 咕咕 //quming #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i) #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v) template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;} template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;} using namespace std; typedef long long ll;

线段树模板 (刘汝佳)

眉间皱痕 提交于 2020-03-19 00:19:19
一、线段树( 点修改 ) Update(x,v): 把Ax修改为v Query(L,R): 计算区间[qL,qR] 最小值。 代码: [cpp] view plain copy // Dynamic RMQ // Rujia Liu // 输入格式: // n m 数组范围是a[1]~a[n],初始化为0。操作有m个 // 1 p v 表示设a[p]=v // 2 L R 查询a[L]~a[R]的min #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int INF = 1000000000; const int maxnode = 1<<17; int op, qL, qR, p, v; //qL和qR为全局变量,询问区间[qL,qR]; struct IntervalTree { int minv[maxnode]; void update( int o, int L, int R) { int M = L + (R-L)/2; if(L == R) minv[o] = v; // 叶结点,直接更新minv else { // 先递归更新左子树或右子树 if(p <= M) update(o*2, L, M); else update(o*2+1, M+1, R)

第二次实验报告

China☆狼群 提交于 2020-03-18 21:57:35
第二次实验报告 C语言设计实验报告 姓名: 周萌 实验地点: 514教室 实验日期: 4月3日 实验项目 ◆if语句的应用 ◆switch/case语句的应用 ◆ switch/case语句嵌套if语句的应用 ◆ switch/case结构的嵌套应用 ◆分析程序 一、实验目的 1、实验4.3.1 ◉掌握C语言逻辑运算和关系运算的规则; ◉学会正确地使用关系表达式和逻辑表达式; ◉掌握if-else语句的使用方法。 2、实验4.3.2 ◉掌握算数运算符和运算规则; ◉掌握switch/case语句的使用方法。 3、实验4.3.3 ◉ 学会正确地使用关系表达式和逻辑表达式; ◉掌握switch/case语句语法和使用方法。注意switch语句的控制流程,在switch语句中break语句的用法。 4、实验4.3.4 ◉switch/case结构的嵌套使用。 ◉break语句与continue语句的用法。 5、4.3.5-分析程序 ◉运行程序,分析输出的结果; ◉运行程序,分析错误的原因,修改程序使其输出正确的结果; ◉掌握C语言表达式与数学表达式的区别。 二、实验内容 实验4.3.1 ◆问题的描述:读入3个分别表示箱子长、宽、高的整数值,判断并输出该箱子是正方体还是长方体。 ◆实验代码; 1 #include<stdio.h> 2 int main(){ 3 int l,w,h; 4

洛谷省选——单调队列

隐身守侯 提交于 2020-03-18 13:55:12
T1 题意 花盆 给出n个点的坐标,以及时间差d。求区间内y坐标的最大值与最小值差大于等于d 的最小x轴区间长度。 (n<=1e5, d<=1e6, x,y<=1e6) ### 思路 设l为一段满足条件的区间的左端点,r为该区间最小右端点,则r具有单调性。 『 单调性证明: 设端点l1满足条件的最小右端点为r1, 端点l2(l2>=l1)满足条件的最小右端点为r2。 则: r2>=r1, 否则端点l1满足条件的最小右端点为r2,矛盾。 故: r具有单调性。 』 因此可在对n个点按x排序之后,枚举左端点,用单调队列维护满足条件的区间的y轴上的最大值与最小值。 代码 #include <bits/stdc++.h> #define I __inline__ __attribute((always_inline)) #define ri register int using namespace std; const int inf = 0x3f3f3f3f; const int maxn = 1e5 + 10; I char readc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++; } I int

【算法学习】单调队列

自闭症网瘾萝莉.ら 提交于 2020-03-18 13:54:47
基础模板 求区间最大值最小值之差在[L,R]范围内的最长区间长度 int l=1; int l1=1,r1=0; int l2=1,r2=0; int ans=0; for(int r=1;r<=n;r++){ //删除队尾元素再入队,使满足单调性 while(l1<=r1 && a[r]>a[mxq[r1]]){ r1--; } mxq[++r1]=r; while(l2<=r2 && a[r]<a[mnq[r2]]){ r2--; } mnq[++r2]=r; //队首元素只能用来维护max和min的最大差值 while(l<=r && l1<=r1 && l2<=r2 && a[mxq[l1]]-a[mnq[l2]]>k){ l++; //删去队头无效元素 while(l1<=r1 && mxq[l1]<l){ l1++; } while(l2<=r2 && mnq[l2]<l){ l2++; } } //根据最小差值的限制,更新答案 if(l1<=r1 && l2<=r2 && a[mxq[l1]]-a[mnq[l2]]>=m){ ans=max(ans,r-l+1); } } 单调队列常用作有大小限制,带删除操作的优先队列?可用来优化dp,或其他类似状态转移。 例题 HDU3530 即上面的模板题 HDU3706 题意 给定 \(n\) , \(A\) , \(B\)

C语言的基本的输入输出

北慕城南 提交于 2020-03-17 15:23:52
C语言的基本的输入输出 prinf()函数 在头文件stdio.h中 printf()函数是格式化输出函数,一般用于向标准输出设备按照规定格式输出信息。 printf()函数的格式为: printf("<格式化字符串>",<参量表>); printf()函数的另一种函数格式为: int printf(const char *format, 参量表) 函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。 其中格式化字符串包括两部分的内容: (1)一部分是正常的字符,这些字符将按照原样输出。 (2) 另一部分是格式化字符,以"%"号开始,后面跟一个或几个格式参数,用来确定 输出内容的格式。 参量表: 参量表是需要输出的一系列参数,其个数必须与前面的格式化字符串中的格式参数个数一样多 ,参量表里的各参数用 " , "符号分开,且参量表里的顺序与前面的格式化参数一 一对应。否则 会出现一些意想不到的错误。 printf函数对参量表中各量求值的顺序是自右至左进行的。 但是必须注意,求值顺序虽是自右至左,但是输出顺序还是从左至右, printf()函数的返回值为实际控制输出的字符数 例: 可以看出第一个printf()它输出了100,总共3个字符,返回值为3。 可以看出第一个printf()的返回值为4,这是因为输出的有100还有\n总共4个字符所以返回值为4.

第七次作业

可紊 提交于 2020-03-17 14:37:55
#include <stdio.h> #include <stdlib.h> int main() { int a[10],n,b[10],i,s=32; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } for(i=1;i<=n;i++) { b[i]=a[n-i+1]; } for(i=1;i<=n;i++) { printf("%d%c",b[i],s); } printf("\n"); return 0; }    #include<stdio.h> #include<string> #include<cstring> int main() { int a[999]; int b[999]; int m,n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } scanf("%d",&m); for(int i=0;i<m;i++) { scanf("%d",&b[i]); } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(a[i]==b[j]) { printf("%d ",a[i]); break; } } } } #include<stdio.h> int main() { int n

CF集萃1

早过忘川 提交于 2020-03-17 13:41:22
因为cf上一堆水题,每个单独开一篇博客感觉不太好,就直接放一起好了。 CF1096D Easy Problem 给定字符串,每个位置删除要代价。求最小代价使之不含子序列"hard"。 设f[i][f]表示前i个删到只匹配f位子序列的最小代价。转移看代码吧。O(n) 1 #include <bits/stdc++.h> 2 3 typedef long long LL; 4 const int N = 100010; 5 6 int a[N]; 7 LL f[N][5]; 8 char str[N]; 9 10 int main() { 11 int n; 12 scanf("%d", &n); 13 scanf("%s", str + 1); 14 for(int i = 1; i <= n; i++) scanf("%d", &a[i]); 15 16 int tag = 0; 17 for(int i = 1; i <= n; i++) { 18 if(tag == 0 && str[i] == 'h') tag++; 19 if(tag == 1 && str[i] == 'a') tag++; 20 if(tag == 2 && str[i] == 'r') tag++; 21 if(tag == 3 && str[i] == 'd') tag++; 22 } 23 if