scanf

UVA - 11297 Census (树套树/四叉树)

人走茶凉 提交于 2020-03-01 21:09:27
题目链接 二维平面RMQ问题,单点修改,区间询问最大最小值 树套树或者四叉树均可做 树套树版本: 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N=500+10,mod=1e9+7,inf=0x3f3f3f3f; 5 int n,Q,a[N][N]; 6 struct D {int mx,mi;} tr[N<<2][N<<2]; 7 D operator+(const D& a,const D& b) {return {max(a.mx,b.mx),min(a.mi,b.mi)};} 8 #define ls(u) (u<<1) 9 #define rs(u) (u<<1|1) 10 #define mid ((l+r)>>1) 11 void pu(int U,int u) {tr[U][u]=tr[U][ls(u)]+tr[U][rs(u)];} 12 D qry2(int U,int y1,int y2,int u=1,int l=1,int r=n) { 13 if(l>=y1&&r<=y2)return tr[U][u]; 14 if(l>y2||r<y1)return {~inf,inf}; 15 return qry2(U,y1,y2,ls(u)

C程序设计 谭浩强 第四章课后习题详解(包含算法分析,运行结果)

大城市里の小女人 提交于 2020-03-01 17:53:49
第四章 选择结构程序设计 章节重点:这一章应着重掌握if...else语句、switch多分支语句、关系运算符和关系表达式、逻辑运算符和逻辑表达式、条件运算符和条件表达式、会使用选择结构的嵌套 (1)概念题(这里着重理解) 算数运算:+、-、*、/运算,对象为实数或复数,结果也为实数或者复数。 关系运算:>、>=、<、<=、==、!=,六种,关系运算的值为逻辑值,true、false。 逻辑运算:&&、||、!,三种,逻辑运算的值为逻辑值,true、false。 (2)概念题(这里着重理解) 在C的逻辑运算中 1 代表为 真,以 0 代表为 假 。 在逻辑表达式中的运算对象 非零 代表 真,以 0 代表 假 。 (3)a=3,b=4,c=5。写出逻辑表达式的值(详细讲解一道题) a+b>3&&b==c 要掌握符号的优先级问题,因为a+b=7所以a+b>3为真,然后b是不等于c的所以为假,1&&0,结果为0。 这种题的解题技巧在先处理关系运算,处理完后在分析逻辑运算,分清运算符的结合方向为自右向左还是自左向右。 (4)输入三个数,输出最大值 # include <stdio.h> int main() { int a,b,c,max; scanf("%d,%d,%d",&a,&b,&c);//注意输入格式 if(a>b) max=a; else max=b; if(max<c)

C总结-part_2-数组&字符串

风流意气都作罢 提交于 2020-03-01 16:54:26
5_数组 & 字符串 数组 数组属于构造数据类型。 数组元素,可以是基本数据类型,也可以是构造类型; 空格 \t 换行 \n ——————————————————————————————————————————————— 数组的大小 int score[10]; sizeof(score); // 40,一个int为4B,10个占用40B sizeof(int); // 4 int length = sizeof(score)/sizeof(int); // 可以通过这种方式计算出数组长度 // 注意:即使数组越界,sizeof依然会返回一个正确的数组元素占用的大小值 // 例如,score[10000],下标越界,但是sizeof依然可以返回4 int len = sizeof(score)/sizeof(score[10000]); ——————————————————————————————————————————————— 数组初始化 int a[10] = {1,2,3,4,5,6,7,8,9,0}; int b[10] = {1,2,3}; // 前3个赋值,后7个全部为默认0; int a[10] = {0}; // 10个元素全部赋值为0 int a[] = {1,2,3,4,5};; // 未指定数组长度,只指定成员 int a[10] = {1}; //

C语言中scanf函数用到的格式控制

大兔子大兔子 提交于 2020-03-01 10:26:01
今天在看同事的代码时遇上下面一行代码: <!-- lang: cpp --> fscanf(pfile, "WEBSPORT=\"%[^\"]\n", webport); 代码的作用很简单,只是函数中的格式控制符我突然有点感觉陌生了,从学校出来后,就比较少用到scanf函数,因此对它的格式控制符也就渐渐地陌生。既然陌生,就必须要重新熟悉才行,于是上网查找了一下,彻底地弄明白上面的含义,重新熟悉了一下scanf函数的格式控制符。在此备忘个人觉得比较容易忘记的一些格式控制符。 scanf中的完整格式控制字符串序列: <!-- lang: cpp --> "% * 域宽 l/h d/o/x/c/s/f/e" //无%u格式、%g格式 说明: %后的“*” 附加说明符,用来表示跳过它相应的数据 根据格式字符的含义从输入流中取得数据,当输入流中数据类型与格式字符要求不符时,就认为这一项结束 隐示分隔符:空格、制表符('\t')、换行符('\n')都是C语言认定的数据分隔符 显示分隔符。在scanf函数的两个格式说明项间有一个或多个普通字符,那么在输入数据时,在两个数据之间也必须以这一个或多个字符分隔。如语句: <!-- lang: cpp --> scanf("a=%d,b=%f,c=%f", &a, &b, &c); //输入数据应该为:a=1234,b=67.8,c=98.123

格式转换说明符scanf,printf格式%大全/格式化输入输出

雨燕双飞 提交于 2020-03-01 09:58:14
相信不管大神还是菜鳥,都认得printf.它家还有兄弟sprintf,scanf,sscanf...$^&* 当你华丽丽的写下char c='c';printf("char=%d",c);的时候,一切都还是那么美好. 不过当你声明一个char buf[2];然后sscanf("30000","%d",buf);的时候,就不那么好玩了. 本以为2个字节足够装下32767以内的数字,却把内存写爆了. 此处关键就是格式符乱写产生的问题. 此时最想要的就是一份完整的可用格式表. 苦于每次都只能找到零星点点还不全,本来打算在此收集做一个全集,在收集过程中发现了一个完整版本转来 格式转换说明符 printf() / scanf()                   表一 转换说明符及作为结果的打印输出 转换说明 输 出 %a 浮点数、十六进制数字和 p- 记数法 (C99) %A 浮点数、十六进制数字和 P- 记数法 (C99) %c 一个字符 %d 有符号十进制整数 %e 浮点数、 e- 记数法 %E 浮点数、 E- 记数法 %f 浮点数,十进制记数法 %g 根据数值不同自动选择 %f 或者 %e 。 %e 格式在指数小于 -4 或者大于等于精度时使用 %G 根据数值不同自动选择 %f 或者 %E 。 %E 格式在指数小于 -4 或者大于等于精度时使用 %i 有符号十进制整数 ( 与 %d

#C 语言# 8.数组

萝らか妹 提交于 2020-03-01 07:38:21
数组引入 1.记录很多数 定义数组——类型 名字[长度]; int number [ 100 ] ; 输入数字—— scanf ( “ % d” , & number [ i ] ) ; \\scanf输入 number [ cnt ] = x; \\赋值输入【cnt指的是在数组中的任意位置】 遍历数组—— for ( i = 0 ; i < cnt ; i ++ ) { if ( number [ i ] > average ) { printf ( "%d" , number [ i ] ) } \\使用数组中的元素 } 数组的定义 1.定义数组——<类型> 变量名称[元素数量]; int grades [ 100 ] ; double weight [ 20 ] ; • 元素数量必须是整数*【必须要提前确定的——在C99以前】* • 如何理解——容器 其中所有的元素具有相同的数据类型; ⼀旦创建,不能改变⼤⼩***【数组含有多少数字】*** (数组中的元素在内存中是连续 **依次排列***的) 可以出现在赋值的左边或右边: • a[2] = a[1]+6; • *在赋值左边的叫做左值 2.数组的单元——数组类型的一个变量 下标或者索引——[]中的数字,下标是从0开始计数的 最大的下标是数组个数减1!! [0,最大下标 - 1] grades[0] grades[99]

C/C++关于处理输入格式问题

倾然丶 夕夏残阳落幕 提交于 2020-02-29 22:02:53
一、 输入未知长度字符数组,以空格分开,例如1 2 3 4,以“ 换行 ”表示结束 注:getchar()会吸收字符,所以一定要放在scanf或cin后使用;scanf/cin默认以空格分开为下一个字符,如果不输入空格,scanf会默认是一个字符。 1.while(1){ } #include<bits/stdc++.h> using namespace std; int main(){ char a[100]; int i=0; while(1){ cin>>a[i++]; if(getchar()=='\n') break; } for(int j=0;j<i;j++){ cout<<a[j]; } return 0; } 2.do...while #include<bits/stdc++.h> using namespace std; int main(){ char a[100]; int i=0; do{ cin>>a[i++]; }while(getchar()!='\n'); for(int j=0;j<i;j++){ cout<<a[j]; } return 0; } 二、 输入未知长度字符串,字符串之间以空格分开,例如ab cd es,以“ 换行 ”表示结束 #include<bits/stdc++.h> using namespace std; int main

Base Conversion In PHP and javascript

拥有回忆 提交于 2020-02-29 19:52:50
http://www.exploringbinary.com/base-conversion-in-php-using-built-in-functions/ http://www.binaryconvert.com/convert_float.html?decimal=054046056050049051 https://www.codeproject.com/Tips/387989/Convert-Binary-Single-Precision-Value-to-Float-in function FloatToIEEE(f) { var buf = new ArrayBuffer(4); (new Float32Array(buf))[0] = f; return (new Uint32Array(buf))[0]; } Unfortunately, this doesn't work with doubles and in old browsers function DoubleToIEEE(f) { var buf = new ArrayBuffer(8); (new Float64Array(buf))[0] = f; return [ (new Uint32Array(buf))[0] ,(new Uint32Array(buf))[1] ]; } ---------

CodeForces - 849B 几何

落爺英雄遲暮 提交于 2020-02-29 12:19:58
题意: 给n个点,问是否能两条平行线覆盖所有的点 思路: 因为要求全部覆盖,所以我们第一个点肯定是会入其中一条直线,其实只用判前三个点的所有情况即可 #include<stdio.h> #include<set> #include<algorithm> using namespace std; int a[1010],n; set<double>s; bool judge(double k) { s.clear(); for(int i=1; i<=n; ++i) s.insert(a[i]*1.0-k*i); return s.size()==2; } int main() { scanf("%d",&n); for(int i=1; i<=n; ++i) scanf("%d",&a[i]); if(judge((a[2]-a[1])/1.0)||judge((a[3]-a[2])/1.0)||judge((a[3]-a[1])/2.0)) printf("Yes\n"); else printf("No\n"); return 0; } 来源: https://www.cnblogs.com/Lis-/p/11312075.html

Codeforces Round #316 (Div. 2) D、E

懵懂的女人 提交于 2020-02-29 08:37:21
Problem D: 题意:给定一棵n个点树,每个点有一个字母,有m个询问,每次询问某个节点x的子树中所有深度为k的点能否组成一个回文串 分析:一堆点能组成回文串当且仅当数量为奇数的字母不多于1个,显然这个状态可以用二进制表示 那么对于单个询问如何快速找到所有符合要求的点呢? 这里可以考虑树的dfs序,我们把深度相同的点按照dfs序加入集合中,易知在同一颗子树中的点肯定形成了一个连续的区间。 因此每次可以通过二分子树根节点的进入dfs序的时间和出dfs序的时间来找到这个区间 找到区间后可以根据预处理出的异或前缀和直接得到这个区间的二进制状态,再check一下即可 复杂度 n+m*(logn+26) 代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 vector<int>g[500010]; 4 int a[500010]; 5 char s[500010]; 6 int in[500010]; 7 int out[500010]; 8 int n,m; 9 int t=0; 10 struct node 11 { 12 int t,val; 13 bool operator <(const node &a)const 14 { 15 return t<a.t; 16 } 17 }; 18 vector<node>ans