freopen

开学第六测

拜拜、爱过 提交于 2020-02-16 05:27:08
          开学第六测   又一次考试... 成绩出来后心情无比的down   为什么??因为爆零了 2333   每次考完试都会发题解 但是被点名必须要写之后,就不是很想写了   接下来是正题:    T1 期望得分:20??      (本题相当于 洛谷 P3365 ) 【题目描述】    小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树。通常子结点被称作“左孩子”和“右孩子” 。二叉树被用作二叉搜索树和二叉堆。随后他又和他人讨论起了二叉搜索树。    什么是二叉搜索树呢?二叉搜索树首先是一棵二叉树。设key[p]表示结点p上的数值。对于其中的每个结点p,若其存在左孩子lch,则key[p]>key[lch];若其存在右孩子rch, 则key[p]<key[rch];注意,本题中的二叉搜索树应满足对于所有结点,其左子树中的key小于当前结点的key,其右子树中的key大于当前结点的key。   小Y与他人讨论的内容则是,现在给定一棵二叉树,可以任意修改结点的数值。修改一个结点的数值算作一次修改,且这个结点不能再被修改。若要将其变成一棵二叉搜索树, 且任意时刻结点的数值必须是整数(可以是负整数或0) ,所要的最少修改次数。   相信这一定难不倒你!请帮助小Y解决这个问题吧。 【 输入格式】   第一行一个正整数 n

Atcoder ABC 070

安稳与你 提交于 2020-02-16 04:33:32
Atcoder ABC 070 Atcoder ABC 070 A B C D ABC 抗压能力不太行,打点模拟赛调整下状态 A 判定一个串是否是回文。 #define judge #include <bits/stdc++.h> using namespace std; int main() { #ifndef judge freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif string s; cin >> s; int tag = 0; for (int i = 0; i < s.size(); i++) { if (s[i] != s[s.size() - i - 1]) { tag = 1; break; } } if (tag) { cout << "No" << endl; } else { cout << "Yes" << endl; } return 0; } B 给定两个区间,求出共同区间的大小,共同区间的左端点等于两个区间的左端点最大值,右端点等于两个区间右端点的最小值。 区间为空时应该是输出 0。 #define judge #include <bits/stdc++.h> using namespace std; int main() { #ifndef judge

机房测试8.24

对着背影说爱祢 提交于 2020-02-15 06:04:16
keys 简单贪心(idy002原话) 我反正是不信的。 要点是证明选择的钥匙一定是连续的n个。 可通过三个点两个人一个办公室之间的选择优劣来进行理解。 问题是为什么输出距离最大值就可以AC? idy002老师的数据已经日渐 生命之源 (水) 了。 忆往昔线段树0分程序5e4大样例A的飞快。 #include<cstdio> #include<queue> #include<algorithm> #define FN "keys" const int maxn=5000+5; const int maxk=10000+5; const int oo=0x3f3f3f3f; int a[maxn],b[maxk]; int abs(int x) {return x<0?-x:x;} int main() { freopen(FN".in","r",stdin); freopen(FN".out","w",stdout); int n,k,p;scanf("%d%d%d",&n,&k,&p); for(int i=1;i<=n;i++) scanf("%d",a+i); for(int i=1;i<=k;i++) scanf("%d",b+i); std::sort(a+1,a+n+1),std::sort(b+1,b+k+1); int ans=oo; for(int i=1;i+n

机房测试9.22

我与影子孤独终老i 提交于 2020-02-15 06:03:13
题解之前 中秋只有一天假! build 以为并查集水题,发现有历史版本,于是可持久化并查集一波 (爆0了) 其实有简单点的做法:用二元组记录每一次变化的siz和fa,二分查询即可。 我还在肝可持久并查集,所以就没有代码了。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> using namespace std; const int MAXN=100005 ; int n, m, fa[MAXN], times[MAXN], h[MAXN], nowT, size[MAXN]; struct Info{ int tm, size ; Info(int _tm=0,int _size=0){ tm=_tm , size=_size; } }; vector<Info> vec[MAXN] ; vector<Info>::iterator it ; bool cmp(const Info &a, const Info &b){ return a.tm < b.tm ; } int findFa(int a){ if(fa[a]==a) return a; return findFa(fa[a]) ; } void mergeNodes(int u,int

[机房练习赛7.26] YYR字符串

拜拜、爱过 提交于 2020-02-15 06:02:18
1 无尽的矩阵 (matrix.c/cpp/pas) 1.1 题目描述 从前有一个的小矩阵,矩阵的每个元素是一个字母(区分大小写),突然有一天它发生了变异,覆盖了整个二维空间,即不停自我复制产生相同的矩阵然后无隙放置。现在二维空间已经被它占领了,但你只被告知了大小为R*C空间的内容(可能包含不完整的原矩阵),为了将它恢复原状,你需要找到满足条件的面积最小的原矩阵。 奇怪的是,同时有 T 个二维空间发生了变异,你需要尽快解决这些变异。 1.2 输入格式 第一行为一个整数T,表示二维空间数目。 接下来T组数据。每组数据第一行包含两个数 R,C,表示你被告知的空间大小;接下来 R 行,每行包含 C 个字母,表示你被告知的空间内容。 1.3 输出格式 对于每一组数据输出一行,每行只包含一个数,表示最小的原矩阵面积。 1.4 样例输入 2 2 5 ABABA ABABA 2 8 ABCDEFAB AAAABAAA 1.5 样例输出 2 12 1.6 数据范围与约定 对于前20%的数据R<=20,C<=20; 对于前40%的数据R<=400,C<=100; 对于100%的数据R<=5000 ,C<=100,T<=50。 将每一行hash 为一个数,对得到的新数组直接跑KMP 求最小循环节长度,列 同理。将两次求得的最小循环节长度相乘即为答案。这就是std 做法。 满分 1 #include

Codeforces Educational Codeforces Round 54 题解

天涯浪子 提交于 2020-02-13 03:48:17
题目链接: https://codeforc.es/contest/1076 A. Minimizing the String 题意:给出一个字符串,最多删掉一个字母,输出操作后字典序最小的字符串。 题解:若存在一个位置 i 满足 a[i] > a[i+1],若不删除 a[i] 则后续操作不可能更优。 1 #include <bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define ull unsigned long long 5 #define mst(a,b) memset((a),(b),sizeof(a)) 6 #define mp(a,b) make_pair(a,b) 7 #define pi acos(-1) 8 #define pii pair<int,int> 9 #define pb push_back 10 const int INF = 0x3f3f3f3f; 11 const double eps = 1e-6; 12 const int MAXN = 2e5 + 10; 13 const int MAXM = 2e5 + 10; 14 const ll mod = 1e9 + 7; 15 16 char s[MAXN]; 17 18 int main() { 19

Codeforces Round #352(Div 2)

旧时模样 提交于 2020-02-11 01:07:18
又一次半夜打CF。(队友太强直接秒题解,然而我座位比较远耳朵不好(雾)听不见)总之,最后结果400多名。估计还能重新上蓝。 A题: *题目描述: 请你求这样的序列“1234567891011……”的第n位数字是多少。 *题解: 直接模拟。 *代码: #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #ifdef WIN32 #define LL "%I64d" #else #define LL "%lld" #endif #ifdef CT #define debug(...) printf(__VA_ARGS__) #define setfile() #else #define debug(...) #define filename "" #define setfile() freopen(filename".in", "r", stdin); freopen(filename".out", "w", stdout); #endif #define R register #define getc() (S == T && (T = (S = B) + fread(B, 1, 1 << 15, stdin), S == T) ? EOF : *S++) #define dmax(_a

树状数组模板--Color the ball

倾然丶 夕夏残阳落幕 提交于 2020-02-10 22:39:48
Color the ball HDU - 1556 N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗? Input 每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。 当N = 0,输入结束。 Output 每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。 Sample Input 1 3 2 1 1 3 2 2 4 3 3 5 3 6 1 1 7 1 2 8 1 3 9 0 Sample Output 1 1 1 3 2 1 思路不难,就是线段树||差分数组||普通树状数组||树状数组+差分的模板题 每次更新时区间各点+1,最后输出每个元素的值,总结来说就是 区间更新+单点查询 TLE版本,单点修改,肯定超时,因为需要每次遍历左端点到右端点去更新,无法保持O(logn)的时间复杂度 普通正解:update数组表示从1到x每个数 更新的次数 ,所以我们只需要update(L-1,-1)和update(R,1)表示[L,R]被更新的次数,相当于将

2017-10-7 清北刷题冲刺班a.m

不打扰是莪最后的温柔 提交于 2020-02-10 18:22:21
测试 A 消失的数字 文件名 输入文件 输出文件 时间限制 空间限制 del.cpp/c/pas del.in del.out 1s 512MB 题目描述 现在,我的手上有 n 个数字,分别是 a 1 ,a 2 ,a 3 ,...,a n 。 我现在需要删除其中的 k 个数字。当然我不希望随随便便删除,我希望删除 k 个数字之后,剩下的 n − k 个数中有最多的不同的数。 输入格式 第一行两个正整数 n 和 k,含义如题目描述。 接下来一行,有 n 个非负整数,分别是 a 1 到 a n 。 输出格式 一共一行,一个整数 ans,表示删除了 k 个数字后最多的不同的数的个数。 样例输入 4 1 1 3 1 2 样例输出 3 样例解释 如果删去第一个 1: 在[3,1,2]中有 3 个不同的数 如果删去 3: 在[1,1,2]中有 2 个不同的数 如果删去第二个 1: 在[1,3,2]中有 3 个不同的数 如果删去 2: 在[1,3,1]中有 1 个不同的数 数据范围 对于 30% 的数据,n ≤ 10,a i ≤ 10。 对于 60% 的数据,n ≤ 100,a i ≤ 100。 对于 80% 的数据,n ≤ 10 5 ,a i ≤ 10 5 。 对于 100% 的数据,n ≤ 10 5 ,a i ≤ 10 9 。 #include<iostream> #include

acm数据制造

99封情书 提交于 2020-02-10 17:13:20
多组数据比较好构造的 我们可以写一个输入的构造器,我们这里用 TZOJ2624: 避雨 举例 我们可以先写好如下标程 #include <string.h> #include <stdio.h> char str[15][15]; int main() { int t, n, m, i, j, sX, sY; int min, ansX, ansY, tmp; scanf("%d", &t); while (t--) { scanf("%d%d", &m, &n); for (i = 0; i < m; i++) { scanf("%s", str[i]); for (j = 0; j < n; j++) if (str[i][j] == 's') { sX = i; sY = j; } } min = 100000; for (i = 0; i < m; i++) for (j = 0; j < n; j++) { if (str[i][j] == 'd') { tmp = (i - sX)*(i - sX) + (j - sY)*(j - sY); if (min > tmp) { min = tmp; ansX = i; ansY = j; } } } printf("(%d,%d)\n", ansX, ansY); } return 0; } View Code