freopen

[HNOI2008]玩具装箱TOY

只愿长相守 提交于 2019-12-27 03:54:13
题目链接 学过斜率优化的同学应该知道只是一道板子题,这里我们给出一个不同的解法: 我们定义 f [ i ] f[i] f [ i ] 表示考虑到了第 i i i 个点的最小代价是多少,那么我们可以得出这个转移式子: f [ i ] = m i n j = 1 i ( f [ j ] + w [ j ] [ i ] ) f[i]=min_{j=1}^i(f[j]+w[j][i]) f [ i ] = m i n j = 1 i ​ ( f [ j ] + w [ j ] [ i ] ) 其中 w [ j ] [ i ] = ( j − i + ∑ k = 1 j c [ k ] − L ) 2 w[j][i]=(j-i+\sum_{k=1}^j c[k]-L)^2 w [ j ] [ i ] = ( j − i + ∑ k = 1 j ​ c [ k ] − L ) 2 看着像不太好优化的样子,但是实际上我们发现 f [ i ] f[i] f [ i ] 是凸的,换句话说 f [ i ] f[i] f [ i ] 的决策点具有单调性。 这样我们考虑如果我们已经知道了一个状态 f [ i ] f[i] f [ i ] ,我们考虑它能更新哪些状态,不难发现,由于决策点具有单调性,那么我们可以二分一下它所影响的区间,具体我们画图来解释一下: 一开始所有点的最优决策点:

[USACO08MAR]土地征用Land Acquisition

谁说胖子不能爱 提交于 2019-12-27 03:27:22
题目链接 首先我们按照长度从大到小排序,这样我们考虑宽就可以了,我们发现这样一个事情: 其中我们发现红色的点可以直接被删去,以为它们一定会被两侧的点覆盖。 于是我们的所求就是: f [ i ] = m i n j = 0 i − 1 ( f [ j ] + a [ j + 1 ] × b [ i ] ) f[i]=min_{j=0}^{i-1}(f[j]+a[j+1] \times b[i]) f [ i ] = m i n j = 0 i − 1 ​ ( f [ j ] + a [ j + 1 ] × b [ i ] ) 然后我们发现 f [ i ] f[i] f [ i ] 是凸的,于是我们单调栈 + + + 二分就可以了,具体做法详见: [HNOI2008]玩具装箱TOY 代码实现: //Optimize # pragma GCC optimize("Ofast") //Head File # include <bits/stdc++.h> using namespace std ; # define il inline //Variable # define ll long long # define ull unsigned long long # define db double # define lb long double //Debug # define B

9.11考试总结

早过忘川 提交于 2019-12-26 05:31:58
# 9.11考试总结 细胞分裂 数学题目,因式分解后直接判断输入数据是否含有m1中分解出来的数,然后储存需要时间最大值中的最小值 #include<bits/stdc++.h> #define open(s) freopen(s".in", "r", stdin);// freopen(s".out", "w", stdout); #define IL inline #define ull unsigned long long #define ll long long using namespace std; int n, m1, m2; int a; int maxb, lenb; int b[30010]; struct date { int su, add; }d[30010]; int lend; IL int read(); IL void cut(int); IL void cutt(int); int main() { open("cell"); n = read(); m1 = read(); m2 = read(); cut(m1); if (m1 == 1) { cout << "0" << endl; return 0; } int ans = 999999999; for (int i=1; i<=n; ++i) { a = read(); int temp

[SCOI2009]迷路

我是研究僧i 提交于 2019-12-26 00:37:32
题目链接 看着好像很不可做的样子,那我们首先考虑一下这道题的弱化版: 假设所有的边权等于 1 1 1 或 0 0 0 ,那么我们可以这么考虑这个矩阵: f [ k ] [ i ] [ j ] f[k][i][j] f [ k ] [ i ] [ j ] 表示从 i i i 到 j j j 的路径长度为 k k k 的条数是多少,那么我们考虑这样转移: f [ k ] [ i ] [ j ] = f [ k − 1 ] [ i ] [ t ] + f [ 1 ] [ t ] [ j ] f[k][i][j]=f[k-1][i][t]+f[1][t][j] f [ k ] [ i ] [ j ] = f [ k − 1 ] [ i ] [ t ] + f [ 1 ] [ t ] [ j ] ,我们发现这可以矩乘,于是我们就可以在 O ( n 3 l o g T ) O(n^3logT) O ( n 3 l o g T ) 的复杂度内解决这个问题。 那么我们考虑边权不为 0 0 0 或 1 1 1 的情况,我们考虑拆点:将每一个点拆成 9 9 9 个点,我们考虑 z [ i ] [ j ] z[i][j] z [ i ] [ j ] 表示到点 i i i 的距离为 j j j 的点,因此我们发现 z [ i ] [ 0 ] z[i][0] z [ i ] [ 0 ] 是实际存在的点

freopen not writing to the specified file

梦想与她 提交于 2019-12-24 02:16:56
问题 I am trying to redirect output of stdout and stderr using a file. I am using freopen and it creates the file in the correct directory but the file is blank. When I comment out the code to redirect the stdout and stderr - the output shows up on the console. Here is the code: freopen(stderrStr.c_str(), "a+", stderr); //where stderrStr and stdoutStr are the path/file name freopen(stdoutStr.c_str(), "a+", stdout); fclose(stdout); fclose(stderr); I have placed a printf("I WORK") in main and

Writing to both terminal and file c++

妖精的绣舞 提交于 2019-12-23 13:07:20
问题 I found this question answered for Python, Java, Linux script, but not C++: I'd like to write all outputs of my C++ program to both the terminal and an output file. Using something like this: int main () { freopen ("myfile.txt","w",stdout); cout<< "Let's try this"; fclose (stdout); return 0; } outputs it to only the output file named "myfile.txt", and prevents it from showing on the terminal. How can I make it output to both simultaneously? I use visual studio 2010 express (if that would make

TC SRM 584 DIV2

南楼画角 提交于 2019-12-22 00:16:08
250pt: 水题set处理。 500pt: 题意: 给你一个图,每条边关联的两点为朋友,题目要求假设x的金钱为y,则他的左右的朋友当中的钱数z,取值为y - d <= z <= y + d.求使得任意两点的最大金钱差值,若果是inf输出-1. 思路: 求任意两点的最短的的最大值即可,比赛时不知道哪地方写搓了,直接被系统样例给虐了,老师这么悲剧500有思路能写,老师不仔细哎.. floyd求任意两点的最短距离好写一些。 #include <iostream> #include <cstdio> #include <cmath> #include <vector> #include <cstring> #include <algorithm> #include <string> #include <set> #include <functional> #include <numeric> #include <sstream> #include <stack> #include <map> #include <queue> #define CL(arr, val) memset(arr, val, sizeof(arr)) #define lc l,m,rt<<1 #define rc m + 1,r,rt<<1|1 #define pi acos(-1.0) #define ll _

SDL Console output works when debuging, but not when run with the exe

∥☆過路亽.° 提交于 2019-12-21 20:54:39
问题 I am writing an experimental networking program, basically a test program for learning networking. I am using SDL and SDL_net in Code::Blocks with mingw, so the console output was being directed to stdout.txt. I searched around and found that you can fix this by including after SDL_Init(): freopen("CON", "w", stdout); //stops redirect of output freopen("CON", "w", stderr); //and errors... This worked perfectly, but only when building and running the program in the IDE: when run outside of the

【11/8】模拟赛

限于喜欢 提交于 2019-12-20 07:28:12
第一题 符文之语 【题目描述】 当小 FF来到神庙时,神庙已经破败不堪了。但神庙的中央有一个光亮如新的石台。小 FF走近石台,发现石台上有一个数串,而数串的上方刻着一串古老的符文之语。精通古符文之语的小 FF不费吹灰之力就读懂了文章的意思,其大意是:对于石台上的一串数字,你可以在适当的位置加入乘号(设加了 k个,当然也可不加,即分成k+1个部分),设这k+1个部分的乘积(如果k=0,则乘积即为原数串的值)对m的余数(即 mod m)为 x;现求 x能达到的最小值及该情况下k的最小值,以及 x能达到的最大值及该情况下的 k的最小值(可以存在 x的最小值与最大值相同的情况)。 小FF还知道,如果他找到了正确的答案,那么就可以通往神庙的下层了。但这个问题似乎不太好解决,小 FF就找到了你,并答应找到财宝以后和你二八分(当然你拿二……)。 【输入格式】 第一行为数串,且数串中不存在 0; 第二行为 m. 【输出格式】 四个数,分别为 x的最小值和该情况下的 k,以及 x的最大值和该情况下的 k,相邻 两个数之间用一个空格隔开。 【样例输入】 4421 22 【样例输出】 0 1 21 0 【数据范围】 对于 30%的数据: 2 <=字符串长度 L<=50. 对于100%的数据: 2 <=字符串长度 L<=1000; 2<=m<=50. 【分析】 f[i][j]代表从1到i,达到j这个余数

[考试]20151105

守給你的承諾、 提交于 2019-12-20 03:29:37
控制面板 1、ZJOI2012 灾难 TAG:拓扑排序+倍增LCA 状态:100% 2、巡防 TAG:树上最远点对DP做法 状态:90% 3、完美代价 TAG:贪心 状态:100% 4、cards TAG:未知 状态:100% 5、set TAG:动态规划 状态:100% 6、chessboard TAG:贪心 状态:75% 7、HCN TAG:搜索 状态:20% 8、seq TAG:动态规划 状态:100% 1、ZJOI2012 灾难   主体思路:求出拓扑序,对于每个节点根据联通关系重新构建一棵树,直接用dep数组体现。根据这棵树直接求出以每个节点为根节点的子树大小,即答案。中间用到倍增LCA来求得这棵树。   首先我们自己新建一个超级生产者0号节点,所有生产者都以这个超级生产者为食物。 考虑在所有生物中建立这样一个结构: 这个结构是一颗树,一个节点代表一种生物,树上一个节点满足这个灭绝会且仅会导致以它 为根的子树灭绝。 如果我们能够建立这样一个结构,那么每个生物对应的答案可以一边 dfs 统计子树大小就得出。   下面就介绍如何建立这样的结构: 首先,把所有的点按照从猎物到捕食者的顺序拓扑排序。然后依次考虑每一个生物 p,假设 在这之前已经建好了拓扑排序顺序在 p 之前的所有生物组成的上面描述的树结构。假设 p 的事物有 k 种,分别是 food[1]…food[k]