freopen

freopen()重定向

℡╲_俬逩灬. 提交于 2019-12-01 04:33:29
freopen函数: 使用不同的文件或模式重新打开流,即重定向 C++ //把一个字符串写入到文件中去: #include<iostream> using namespace std; int main(void) { /* redirect standard output to a file */ if(freopen("D:\\out.txt", "w", stdout) == NULL) fprintf(stderr,"error redirecting stdout\n"); /* this output will go to a file */ printf("This will go into a file.\n"); string s = "12345"; cout<<s<<endl; int a,b; while(cin>>a>>b){ cout<<a<<b<<endl; } /*close the standard output stream*/ fclose(stdout); return 0; } View Code #include <iostream> using namespace std; int main(void) { FILE *fp; fp = freopen("D:\\in.txt","r",stdin); //freopen() 的返回值

CodeCraft-19 and Codeforces Round #537 (Div. 2) A, B, C

末鹿安然 提交于 2019-12-01 03:47:38
CodeCraft-19 and Codeforces Round #537 (Div. 2) A, B, C A. Superhero Transformation 题目链接 题面: 划掉 题意: 见题面 思路: 将元音字母转换为*,辅音字母转换为+,判断最后两个字符串是否相同即可。 AC代码: #include <iostream> #include <iomanip> #include <algorithm> #include <cstring> #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <string> #include <vector> #include <set> #include <map> #include <queue> #include <vector> #include <stack> #include <bitset> using namespace std; #define FSIO ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define DEBUG(a) cout<<"DEBUG: "<<(a)<<endl; #define ll long long #define ull

【CF】Codeforces Round #423(Div.1)

给你一囗甜甜゛ 提交于 2019-12-01 03:44:52
原题地址 A. String Reconstruction 【题目大意】 给定n个字符串在一个串T中出现的位置,求构造一个符合要求的字典序最小的T。 【解题思路】 暴力赋值肯定会T,重点是如何维护空位置。 我们DSU维护每个位置右边第一个空位置在哪,剩下的填a就行了。 我们还可以用线段树完成这个东西。 我们也可以用一个数组记录这个东西。 我们还可以用一些玄学加暴力搞这个东西。 【代码】 #include<bits/stdc++.h> const int MAXN = 2e6 + 5 ; using namespace std ; int n,maxL; char s[MAXN],ans[MAXN]; int main() { // freopen("A.in","r",stdin); // freopen("A.out","w",stdout); scanf ( "%d" ,&n); while (n--) { int k; scanf ( "%s%d" ,s,&k); int len= strlen (s); int p,start = 0 ; for ( int i= 0 ;i<k;i++) { scanf ( "%d" ,&p); start=max(start,p); for ( int j=start;j<p+len;j++) ans[j]=s[j-p]; start=p

机房测试10:车站分级 加强版(线段树优化建图+虚拟点)

£可爱£侵袭症+ 提交于 2019-12-01 01:21:50
题目: 弱化版 分析: 题目转化成,每次给出一段区间,在区间中选出几个点,选出的点比未选出的点等级高。 1. 将选出的点向区间中的每一个点都连权值为 1 的边,用 拓扑 求最长路径(一定是一个 有向无环图 ),边数n*n*m,时间复杂度O(n*n*m) 2. 不直接连边,添加一个 虚拟节点 ,将选出的点向虚拟节点连边,虚拟节点向区间连边,边数n*m,时间复杂度O(n*m) 3. 在2.的基础上,向区间中的每一个点连边改成用 线段树向区间连边 ,边数m*logn,时间复杂度O(m*logn) 下面有两种连边方法: 1. 线段树中, 父亲向儿子 连边,权值为0。 叶子结点向虚拟节点连边,权值为1。 虚拟节点向区间连边,权值为0。 拓扑序中,入度为0的点是起点,出度为0的点是叶子节点,是终点。 最后跑出来是最高等级与最低等级的差,所以 答案要+1 #include<bits/stdc++.h> using namespace std; #define N 200005 #define mid ((l+r)>>1) #define ri register int int read() { int x=0,fl=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') fl=-1; ch=getchar(); } while(ch>=

Educational Codeforces Round 74 (Rated for Div. 2)

拟墨画扇 提交于 2019-11-30 23:36:42
传送门 A. Prime Subtraction 判断一下是否相差为 \(1\) 即可。 B. Kill 'Em All 随便搞搞。 C. Standard Free2play 题意: 现在有一个高度为 \(h\) 的悬崖,每一层有平台,但可能是隐藏状态。 高度为 \(h\) 的那层平台一定是在外面的,假设当前高度为 \(x\) ,那么每次可以改变 \(x\) 和 \(x-1\) 层平台的状态。 规定一个人若从 \(x\) 掉到 \(x-1\) 或者 \(x-2\) 都没事,否则就出事了。 问最少改变多少平台的状态,能够使在 \(h\) 高度的人顺利到达地面(高度为 \(0\) )。 思路: 我大概模拟了一下这个过程,然后发现对于连续的 \(x,x-1,\cdots,x-k\) ,最终答案是否加一与 \(x\) 和 \(x-k\) 的奇偶性相关。 并且从 \(h_i\) 到 \(h_{i+1}\) ,假设中间有空平台,其实最后到达的是 \(h_{i+1}-1\) ,然后就这样模拟一下这个过程就行了。 注意一下细节:最后到地面的时候记得判断一下高度是否大于 \(2\) ,否则答案会加一。 代码如下: Code #include <bits/stdc++.h> #define MP make_pair #define fi first #define se second #define

图论1 1009

柔情痞子 提交于 2019-11-30 23:21:15
重量差异 有n个物品,m次操作:告诉物品a比b轻w个重量单位(不会矛盾),询问物品a比物品b轻多少重量单位(根据已有信息)。 对于所有数据,1<=N,M<=100000,1<=a,b<=N 题解 带权并查集模板题。 记录val为x父亲比x重多少,注意路径压缩的合并。 代码有注释。 不要把find(x)写成find(dx)(可能只有我会这么写) #include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int maxn=100005; int n,m; int fa[maxn],val[maxn]; template<class T>inline void read(T &x){ x=0;int f=0;char ch=getchar(); while(!isdigit(ch)) {f|=(ch=='-');ch=getchar();} while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} x = f ? -x : x ; } int find(int x){ if(fa[x]==x) return x; //w[f]-w[fa[x]]=val[fa[x]] //w[fa[x]]-w[x]=val[x] //w[f

10 8

让人想犯罪 __ 提交于 2019-11-30 22:35:11
  今天的题目 还行 连蒙带猜的写 怎么会如此玄学。还是我太菜了。 看了一眼好像没有什么规律 每个位置上的数字都没有任何的规律 弃疗 不会 自闭 然后发现了每行数字是单调的 所以可以一层一层向下走 判断大小然后一直向下走 二叉树还是挺容易看出来的。 然后判断一下就行了 发现 最差也就是走n层所以可以通过本题。 //#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<ctime> #include<cstring> #include<string> #include<queue> #include<deque> #include<cmath> #include<algorithm> #include<vector> #include<cctype> #include<cstdlib> #include<utility> #include<bitset> #include<set> #include<map> #include<stack> #include<iomanip> #define INF 1000000000 #define ll long long #define min(x,y) ((x)>(y)?(y):(x)) #define max(x,y) ((x)>(y)?(x):(y))

DP2 1008

大兔子大兔子 提交于 2019-11-30 21:03:52
hotel Miss D和gnaw出去玩的时候,发现一个很奇怪的旅馆,宾馆老板特别喜欢数字4和7,如果一个房间里住4或7个人,他就会很开心,不然他甚至不想让这个房间里住人。现在告诉你每个房间住的人数(7人以内),将一个原在i号房间的人移动到j房间的代价是abs(i-j),要想能满足老板的要求,花费的代价是多少? 输入 第一行一个数n,表示房间数 第二行n个数,表示每个房间原先住着的人数 输出 一个数,表示按照老板要求最小的花费 如果不能按要求分配,输出-1 100%:1<=n<=1e5 题解 状态设计是最难想的,f[i][j]为第i个房间向后一个房间移动j个人且第i个房间满足条件的最小操作数。 因为一个房间最多7个人,所以最多向后移动7个人,不过也看是移进来,所以第二维14,以7为基底。 在转移的时候枚举从这个房间转出和下个房间转出多少人,这样可以考虑到所有情况。 最后从第n-1个房间找答案,因为第n个房间不能转出。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int maxn=100005; const int inf=1061109567; int n,a[maxn]; int f[maxn][20];//从第i个房间向i

【国庆集训】10.8

僤鯓⒐⒋嵵緔 提交于 2019-11-30 20:54:00
这次比赛不是很难(但是我也只有140),但竟然是第三名(捂脸) T1: clique 【题目描述】 数轴上有 n 个点,第 i 个点的坐标为 xi ,权值为 wi 。两个点 i,j 之 间存在一条边当且仅当 abs(xi-xj)>=wi+wj 。 你需要求出这张图的最大团的点数。(团就是两两之间有边的顶点 集合) 【输入数据】 第一行一个整数 n ,接下来 n 行每行两个整数 xi,wi 。 【输出数据】 一行一个整数表示答案。 【样例输入】 4 2 3 3 1 6 1 0 2 【样例输出】 3 【数据范围】 对于 20% 的数据, n<=10 。 对于 60% 的数据, n<=1000 。 对于 100% 的数据, n<=200000 , 0<=|xi|,wi<=10^9 。 考场上看了几眼就去做T2,结果发现T2不会,打了暴力又回来 画图手玩样例,就像到正解了。。。。。。 不就是一个选最多不重合区间吗 但是后来某巨佬讲课才知道用最长上升子序列+线段树优化 #include<bits/stdc++.h> using namespace std; #define ll long long #define cg ch=getchar() const int _=500002; ll number,x[_],w[_],f[_],tl,ans=1; struct node{ll l,r;

【国庆集训】 10.1

拈花ヽ惹草 提交于 2019-11-30 18:59:22
说实话,这次考试只有第三题恶心一点,太菜的我只有100,第二题写了正解没过 T1 1.爬山(mountain.cpp) 题目描述 FGD 小朋友特别喜欢爬山,在爬山的时候他就在研究山峰和山谷。为了能够让 他对他的旅程有一个安排,他想知道山峰和山谷的数量。给定一个地图,为 FGD 想要旅行的区域,地图被分为 n*n 的网格,每个格子(i,j) 的高度 w(i,j)是给定的。 若两个格子有公共顶点(八连通),那么他们就是相邻的格子。我们定义一个格子 的集合 S 为山峰(山谷)当且仅当: 1. S 的所有格子都有相同的高度。 2. S 的所有格子都联通 3. 对亍 s 属亍 S,不 s 相邻的 s’丌属亍 S。都有 ws > ws’(山峰),戒者 ws < ws’(山谷)。 你的任务是,对亍给定的地图,求出山峰和山谷的数量,如果所有格子都有相同 的高度,那么整个地图即是山峰,又是山谷。 输入格式 第一行包含一个正整数 n,表示地图的大小(1<=n<=1000)。接下来一个 n*n 的矩阵,表示地图上每个格子的高度。 (0<=w<=1000000000) 输出格式 应包含两个数,分别表示山峰和山谷的数量。 输入输出样例 in: 5 8 8 8 7 7 7 7 8 8 7 7 7 7 7 7 7 8 8 7 8 7 8 8 8 8 out: 2 1 好吧,一道小水题(捂脸),也就想了半个小时