scanf

sync_with_stdio(false)的副作用

◇◆丶佛笑我妖孽 提交于 2020-03-28 00:01:25
sync_with_stdio() 的一个特性 水一篇随笔 其实对于用快读的大佬来说没什么用,但还是提一下 ios::sync_with_stdio(false) 用处是“关闭同步”,从而加快cin与cout的效率。 在部分机子上如果开了这个函数cin和cout跑的还比printf和scanf快。 但是用了sync_with_stdio(false)之后不能与printf和scanf同用,否则会出错。 最近调试的时候发现的: #include<iostream> #include<cstdio> using namespace std; int main() { ios::sync_with_stdio(false); cout<<"1\n"; printf("2\n"); cout<<"3\n"; printf("4\n"); } 运行结果是: 2 4 1 3 可以发现开了 ios::sync_with_stdio(false) 之后,printf函数被提前了,而且这与它在代码中具体出现的位置无关。 至于为什么,据说是C++为了兼容C语言,保证程序在使用 std::printf 和 std::cout 的时候不发生混乱(不发生上述情况),将输出流绑到了一起,也就是用了 sync_with_stdio() 函数: 如果不绑到一起(也就是开个ios::sync_with_stdio

zoj 3811 untrusted patrol

拜拜、爱过 提交于 2020-03-27 17:31:39
昨天网赛的C题,我负责的,题意有些模模糊糊的 我首先弄清楚了题意,即要求一个patrol是否可能巡视过所有的点,首先整个图要是连通的,这个在建图的时候边用下并查集即可,然后某些点装了传感器,传感器应该要全部都响应过才行,即L==k否则直接输出No,然后就是重点,给出的传感器的响应先后顺序,我们要在图上找到这样一种路径,路径上的传感器的先后顺序正好对应了给出的记录,找不到则是No,找到了就是Yes。 我一开始看到点有10万个,想用DFS+回溯尝试每种路径,最多20W条的路,但是路径种树就远远不止了。。所以抱着尝试的心态,这样的子TLE了就知道不是这种方法了。 后来就是我坑了,聪哥想了一种BFS的方法,只要对所有点遍历一遍即可,我听了两遍才搞清楚,而且还歪曲了其中一个重要的思想,导致第一次敲出的BFS还WA了一发。他给我讲完之后,我理解的思路是从传感器的第一个出发,往下进行搜索,是普通点就vis掉加入队列,是我们当前要找的下一个传感器就也vis掉加入队列,并且把一个cur标记++,这样如果存在这样的路径,最后的cur就==k,然后这种方法其实是错的,这就是我忽略了聪哥给我讲的思想的重要一点,因为题目里面传感器是只记录第一次到达的时间,所以可以来回走,这么说的话,我要找的传感器的序列 不一定要是真的存在一条路径上,只要走回之前的点,能找到下一个新的传感器也是合理的 。。。

PAT初步--测试

≯℡__Kan透↙ 提交于 2020-03-27 13:25:16
黑盒测试 刷题网站常用的是黑河测试,系统后台准备若干组输入数据,让提交程序取运行这些数据,看输出的结果是否与正确答案 完全相同 。 黑盒测试分为单点测试和多点测试 单点测试 系统判断每组数据的输出结果是否正确,正确则该组数据通过测试,用户可获得该组数据的分值。 #include<stdio.h> int main(){ int a,b; // 这里推荐如果输入是 1空格2这样的形式,scanf也保持 %d空格%d的格式,逗号之类的同理,保持一致。怕出现不必要的问题。我用vscode写代码遇到过这些问题! scanf("%d %d",&a,&b); printf("%d===%d",a,b); } 多点测试 要求程序一次性运行所有的数据,所有输出结果完全正确这次才算通过;只要有一组数据输出错误,得分都是0分。PTA平台用的单点测试! 多点测试代码模板 void fn2(){ int a, b; // 获取输入结束时(就是读不到数据,读入数据失败),scanf会返回EOF。EOF是一个数值 // scanf("%d %d", &a, &b)成功读入两个数据会返回2.读入失败时会返回-1,C语言中用EOF表示-1 while (scanf("%d %d", &a, &b) != EOF){ // 处理数据 printf("%d %d", a, b); } } //关于EOF的测试 int

循环练习

╄→尐↘猪︶ㄣ 提交于 2020-03-27 03:34:13
//循环(计算某个数的位数) 输入一个正整数, 计算这个正整数的位数 //int main(int argc, const char * argv[]) { // int n; // int cnt=0; // scanf("%d", &n); // while (n) { // cnt++; // n/=10; // } // printf("cnt = %d\n", cnt); // // return 0; //} //a=1 b=1 //a+b/a 2/1 a = 2 b = 1 //a+b/a 3/2 a = 3 b = 2 //a+b/a 5/3 a = 5 b = 3 //... //9 流程控制(数值序列2) 输出数字序列 2/1,3/2,5/3,8/5,13/8,21/13...,输出个数由键盘输入。注意输入使用scanf输入 feibonaqi //\ //比如: // //输入 3输出为 // //2/1 //3/2 //5/3 // //输入 4 输出为 //2/1 //3/2 //5/3 //8/5 //\ //int main(int argc,const char *argv[]) //{ // int n; // int a=1,b=1; // scanf("%d", &n); // for (int i=0; i<n; i++) { // int

LCA最近公共祖先

冷暖自知 提交于 2020-03-27 02:29:06
不会 准备研究一波!!! 1 #include<bits/stdc++.h> 2 const int maxn = 500010; 3 using namespace std; 4 vector<int> g[maxn]; 5 int par[20][maxn], dep[maxn], n, m, ml; 6 void dfs(int v, int p, int d) 7 { 8 par[0][v] = p; 9 dep[v] = d; 10 for (int i = 0; i < g[v].size(); ++i){ 11 if (g[v][i] != p) dfs(g[v][i], v, d + 1); 12 } 13 return ; 14 } 15 void init(int v) 16 { 17 dfs(v, -1, 0); 18 int sum = 1; 19 while (sum <= n) sum <<= 1, ++ml; 20 for (int k = 0; k < ml; ++k){ 21 for (int v = 1; v <= n; ++v){ 22 if (par[k][v] == -1) par[k + 1][v] = -1; 23 else par[k + 1][v] = par[k][par[k][v]]; 24 } 25 } 26 return ;

2017 UESTC Training for Dynamic Programming

允我心安 提交于 2020-03-26 05:54:29
2017 UESTC Training for Dynamic Programming A 思维, 或 dp, 很有意思 方法1: 构造法:蛇形安排赛程表 算法复杂度:O(N^2) 将1-N排成两竖列,每一轮同一行的为对手 保持1的位置不变,其他位置按顺(逆)时方向依次旋转 1 6 1 2 1 3 1 4 1 5 2 5 3 6 4 2 5 3 6 4 3 4 4 5 5 6 6 2 2 3 1 N 2 N-1 3 N-2 . . . . . . N/2 N/2+1 #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a;i<=b;i++) #define per(i,b,a) for (int i=b;i>=a;i--) #define mes(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f #define MP make_pair #define PB push_back #define fi first #define se second typedef long long ll; const int N = 200005

仓库选址(二维前缀和)

人走茶凉 提交于 2020-03-26 04:45:29
链接: https://ac.nowcoder.com/acm/contest/4462/G 来源:牛客网 时间限制:C/C++ 4秒,其他语言8秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 牛能在某小城有了固定的需求,为了节省送货的费用,他决定在小城里建一个仓库,但是他不知道选在哪里,可以使得花费最小。 给出一个 m × n的矩阵,代表下一年小城里各个位置对货物的需求次数。我们定义花费为货车载货运输的距离,货车只能沿着水平或竖直方向行驶。 输入描述: 首先在一行中输入 T,T≤10 ,代表测试数据的组数。 每组输入在第一行给出两个正整数 n,m,1≤n,m≤100 ,分别代表矩阵的宽和高。 接下来m行,每行n个不超过1000的数字,代表矩阵里的元素。 输出描述: 每组输入在一行中输出答案。 输入 3 2 2 1 1 1 0 4 4 0 8 2 0 1 4 5 0 0 1 0 1 3 9 2 0 6 7 0 0 0 0 0 0 0 1 0 3 0 1 2 9 1 2 1 2 8 7 1 3 4 3 1 0 2 2 7 7 0 1 0 0 1 0 0 0 0 0 0 0 输出 2 55 162 备注: 送货时只能单次运输,若该位置需要3次,货车必须跑3次。 即使该位置需要被送货,我们仍然可以选择该位置作为仓库。

Google Kick Start 2020 Round A

筅森魡賤 提交于 2020-03-25 21:08:26
Allocation 题意 N 个房子出售,每个卖 Ai 刀,现有 B 刀资金,求最多买多少个。 思路 贪心,排序后从小到大买 代码 #include<bits/stdc++.h> using namespace std; const int MAX=1e5+5; int a[MAX]; int main() { int T,cas=0; scanf("%d",&T); while(T--) { int n,b,res=0; scanf("%d%d",&n,&b); for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); for(int i=0;i<n;i++) { if(a[i]>b)break; b-=a[i]; res++; } printf("Case #%d: %d\n",++cas,res); } } Plates 题意 有 n 摞盘子,每一摞有 k 个,每个盘子有一定价值,现在要选 p 个盘子,要求每次只能选一摞的从上到下的一部分,求如何选使得总价值最大 思路 DP , dp[i][j] 表示前 i 摞中共选 j 个可得的最大价值,转移枚举当前摞选 m 个(选前缀),然后由 dp[i-1][j-m] 转移而来 代码 #include<bits/stdc++.h> using namespace std; const

单向链表实例:终端交互简易通讯录

狂风中的少年 提交于 2020-03-24 01:21:05
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 6 typedef struct Contacts_infomation{ 7 char name[13]; 8 char work_unit[61]; 9 char phone_number[12]; 10 char E_mail[61]; 11 struct Contacts_infomation *next; 12 }con_info; 13 14 15 con_info * Creat_node(void) 16 { 17 con_info *new; 18 19 new = (con_info *)malloc(sizeof(con_info)); 20 if(!new){ 21 printf("Malloc Error!\n"); 22 exit(-1); 23 } 24 new->next = NULL; 25 26 return new; 27 } 28 29 int insert_node(con_info ** phead) 30 { 31 con_info *new, *cur; 32 33 cur = *phead; 34 new = Creat_node(); 35 if(!new){ 36 return -1; 37

Google KickStart 2020 RoundA

。_饼干妹妹 提交于 2020-03-23 12:26:57
第一题:Allocation 题意: N个房子,第i个房子价格为Ai美元,用B美元最多买几个房子。 Limit: 1 ≤ T ≤ 100. 1 ≤ B ≤ 10^5. 1 ≤ Ai ≤ 1000, for all i. 1 ≤ N ≤ 10^5. 分析: 按价格从小到大排序即可。 #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<string> #include<iostream> #include<set> #include<map> #include<stack> #include<queue> #include<vector> #include<sstream> typedef long long LL; const int INF = 0x3f3f3f3f; using namespace std; const int MAXN = 100000 + 10; const double eps = 1e-8; int dcmp(double a, double b){ if(fabs(a - b) < eps) return 0; return a < b ? -1 : 1; } int a[MAXN]; int main(){