scanf

转:经典ACM算法

孤街醉人 提交于 2020-03-13 07:16:46
实验一 统计数字问题 实验二 最大间隙问题 实验三 众数问题 实验四 半数集问题 实验五 集合划分问题 实验六 最少硬币问题 实验七 编辑距离问题 实验八 程序存储问题 实验九 最优服务次序问题 实验十 汽车加油问题 实验十一 工作分配问题 实验十二 0-1背包问题 实验十三 最小重量机器设计问题 实验十四 最小权顶点覆盖问题 实验十五 集合相等问题 实验十六 战车问题 实验一 统计数字问题 1、问题描述: 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。 2、题目分析: 考虑由0,1,2,…,9组成的所有n位数。从n个0到n个9共有个n位数,在这些n位数中,0,1,2,…,9每个数字使用次数相同,设为。 满足如下递归式: 由此可知,。 据此,可从低位向高位进行统计,再减去多余的0的个数即可。 3、算法设计: 定义数组a[10]存放0到9这10个数出现的次数,个位为第0位,第j位的数字为r。采用while循环从低位向高位统计: a. 统计从个位算起前j位0~9个数; b. 如果j+1位为0,去掉第j+1位补0个数; c. 统计第j+1位出现1~(r-1)个数; d.

转:经典ACM算法

荒凉一梦 提交于 2020-03-13 07:15:47
实验一 统计数字问题 实验二 最大间隙问题 实验三 众数问题 实验四 半数集问题 实验五 集合划分问题 实验六 最少硬币问题 实验七 编辑距离问题 实验八 程序存储问题 实验九 最优服务次序问题 实验十 汽车加油问题 实验十一 工作分配问题 实验十二 0-1背包问题 实验十三 最小重量机器设计问题 实验十四 最小权顶点覆盖问题 实验十五 集合相等问题 实验十六 战车问题 实验一 统计数字问题 1、问题描述: 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。 2、题目分析: 考虑由0,1,2,…,9组成的所有n位数。从n个0到n个9共有个n位数,在这些n位数中,0,1,2,…,9每个数字使用次数相同,设为。 满足如下递归式: 由此可知,。 据此,可从低位向高位进行统计,再减去多余的0的个数即可。 3、算法设计: 定义数组a[10]存放0到9这10个数出现的次数,个位为第0位,第j位的数字为r。采用while循环从低位向高位统计: a. 统计从个位算起前j位0~9个数; b. 如果j+1位为0,去掉第j+1位补0个数; c. 统计第j+1位出现1~(r-1)个数; d.

Codeforces Round #627 (Div. 3)题解 cf 1324A 1324B 1324C 1324D 1324E 1324F

微笑、不失礼 提交于 2020-03-13 05:12:21
https://codeforces.com/contest/1324 A. Yet Another Tetris Problem n列的俄罗斯方块画面,现在第 \(i\) 列已经有 \(a_i\) 块方块了,问能不能用若干个一列两行的方块把所有方块Sakuzyo。 判所有数字奇偶性是否相同就行,有手就能过 #include <bits/stdc++.h> #define LL long long #define pb push_back #define eb emplace_back #define pii pair<int,int> #define pll pair<LL,LL> using namespace std; int T, n, a[108]; bool gao() { for (int i = 1; i <= n; ++i) { if (a[i] % 2 != a[1] % 2) return false; } return true; } int main() { cin >> T; while (T--) { cin >> n; for (int i = 1; i <= n; ++i) cin >> a[i]; cout << (gao()? "YES":"NO") << endl; } } B. Yet Another 有手就行 Palindrome

初涉数论

Deadly 提交于 2020-03-12 18:52:19
题目描述 对于给定的 x , 求出使得 x^y%mod = 1 的最小正整数y , 其中 mod = 790660457 . 输入 多组输入(最多50000组 ) 每组一个x ( 0 < x < mod ) 输出 首先测试组数 , 然后输出对应的最小正整数 y , 具体见样例 样例输入 1 3 样例输出 Case #1: 1 Case #2: 790660456 提示 费马小定理 快速幂 一个由费马小定理推出来的结论,这个y一定会是mod-1的因子。 //Asimple #include <bits/stdc++.h> #define INF 0xfffffff #define mod 790660457 #define swap(a,b,t) t = a, a = b, b = t #define CLS(a, v) memset(a, v, sizeof(a)) #define debug(a) cout << #a << " = " << a <<endl #define abs(x) x<0?-x:x #define srd(a) scanf("%d", &a) #define src(a) scanf("%c", &a) #define srs(a) scanf("%s", a) #define srdd(a,b) scanf("%d %d",&a, &b)

NOIP模拟测试11

☆樱花仙子☆ 提交于 2020-03-12 17:11:38
这次考试T1想到了正解没有去实现,然后就死了,不过我估计就算想到正解也会挂(26^2和暴力一个分),肝了两个小时T2屁都没蹦出来,T3没有搞清那个式子的含义。 (不过一分没挂) T1:string 开26棵线段树维护,还有一种更快的方法:对于每个树上的节点,只有左右儿子字符相同时才更新,不然不更新,这种打法将26换成了较小的常数,并且不需要memset,真是 出家旅行必备 骗分之良器 1 #include <bits/stdc++.h> 2 3 typedef long long LL; 4 5 inline int rd() { 6 int a = 1, b = 0; char c = getchar(); 7 while (!isdigit(c)) a = c == '-' ? 0 : 1, c = getchar(); 8 while (isdigit(c)) b = b * 10 + c - '0', c = getchar(); 9 return a ? b : -b; 10 } 11 12 const int N = 100000 + 2333; 13 14 int n, m; char str[N]; 15 16 int same[N * 3]; 17 18 #define ls(p) p << 1 19 #define rs(p) p << 1 | 1 20 21

golang碎片整理之 fmt.Scan

只愿长相守 提交于 2020-03-12 16:32:12
本文介绍了从golang语言中fmt包从标准输入获取数据的Scan系列函数、从io.Reader中获取数据的Fscan系列函数以及从字符串中获取数据的Sscan系列函数的用法。 Scan系列 go语言fmt包下有fmt.Scan、fmt.Scanf、fmt.Scanln三个函数,可以在程序运行过程中从标准输入获取用户的输入。 fmt.Scan 语法 func Scan(a ...interface{}) (n int, err error) Scan 从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符。 本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。 代码示例 package main import "fmt" func main(){ var ( name string age int married bool ) fmt.Scan(&name,&age,&married) fmt.Printf("扫描结果 name:%s age:%d married:%t\t",name,age,married) } 将上述代码在终端运行,在终端依次输入 Alfred 、26、false使用空格分隔。 go run main.go alfred 26 false 扫描结果 name:alfred age

数列分块入门(最后一个难啊)

柔情痞子 提交于 2020-03-12 07:13:00
感觉这个不算科技吧,就是现在把操作降在块内了,算是暴力的优化 https://loj.ac/problem/6277 LOJ6277. 数列分块入门 1 对于这些数你有两种操作,0是区间+,1是区间查询 #include<bits/stdc++.h> using namespace std; #define N 50005 int m,belong[N]; int a[N],tag[N]; void change(int l,int r,int val) { for(int i=l;i<=min(r,belong[l]*m);i++) a[i]+=val;//将a块内剩余部分暴力更新 if(belong[l]!=belong[r]) { for(int i=(belong[r]-1)*m+1;i<=r;i++) a[i]+=val;//将b块内剩余部分暴力更新 } for(int i=belong[l]+1;i<=belong[r]-1;i++)tag[i]+=val;//将整块需要加的值更新上去 } int main() { int n; scanf("%d",&n); m=sqrt(n);//一块有几个 for(int i=1;i<=n;i++) belong[i]=(i-1)/m+1;//将每个值分到所给的块内 for(int i=1;i<=n;i++) scanf("%d"

2018年全国多校算法寒假训练

感情迁移 提交于 2020-03-11 16:25:52
题目描述 夫夫有一天对一个数有多少位数感兴趣,但是他又不想跟凡夫俗子一样, 所以他想知道给一个整数n,求n!的在8进制下的位数是多少位。 输入描述: 第一行是一个整数t(0<t<=1000000)(表示t组数据)接下来t行,每一行有一个整数n(0<=n<=10000000) 输出描述: 输出n!在8进制下的位数。 示例1 输入 3 4 2 5 输出 2 1 3 思路: 斯特林公式。 斯特林公式(Stirling's approximation)是一条用来取n的 阶乘 的 近似值 的数学公式,求N!的位数: lnN!=NlnN-N+0.5*ln(2*N*pi) !要想求有多少位,将他换成以10为底便可。利用换底公式得 log10N!=lnN!/ln10=n*lg(n/E) +lg(sqrt(2*n*PI)).把式子取整形加1就是位数! 代码: 1 //#include "bits/stdc++.h" 2 #include "cstdio" 3 #include "map" 4 #include "set" 5 #include "cmath" 6 #include "queue" 7 #include "vector" 8 #include "string" 9 #include "cstring" 10 #include "time.h" 11 #include "iostream

关于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

scanf与printf用法详解

ⅰ亾dé卋堺 提交于 2020-03-10 09:10:36
一、scanf家族 1、scanf家族的原型 int scanf(char const *format,...); int fscanf(FILE *stream,char const *format,...); int sscanf(char const *buffer,char const *format,...); 每个原型中的省略号表示一个可变长度的指针列表。从输入转换而来的值逐个存储到这些指针指向的内存位置。由于C的参数传递都是传值调用决定了可变参数都是指针列表。注意:若给的不是指针,而是变量值。scanf将把变量值当做指针,在进行解引用时或者导致程序终止,或者导致不可预料的内存位置的数据被改写。 2、返回值 当格式化字符串format到达末尾或者读取的输入不再匹配格式字符串所指定的类型时,输入就停止,并返回被转换的输入值的数目,若在任何输入都没被转换之前文件就到达尾部则返回EOF。 3、类型的匹配 由于scanf是采用可变参数的机制,所以函数无法验证它们的指针参数是否为正确的类型,所以函数假定它们是正确的,(因此格式字符必须和后面的指针指向的类型保持一致)如果指针参数的类型和输入数据的类型不匹配则结果值就是垃圾。而且邻近的变量也有可能被改写。例如: float a; scanf("%d",&a); //本来a是一个float数据,却用一个整形指针指向变量a。 4