freopen

【NOIP2011提高组】计算系数

泪湿孤枕 提交于 2019-12-04 06:51:22
计算系数 算法:真·滚动数组模拟!!! 马上CSP/S了,这是远在今年暑假前的一天的校内考试题中的一道。当时做的时候不会组合数,不会二项式定理,不会DP,不会……只知道应该n*n的空间存一个杨辉三角形图,然后依次读取。 然而考场上发现这个可以优化,并滚键盘滚出了下面的那一坨东西居然对了:只需2个数组就可以存下整个题目所需要的杨辉三角形:杨辉三角形的长度和k有关,比如: 3——1 2 1,长度3 4——1 3 3 1,长度4 …… 可见k为奇数,则杨辉三角形长度为奇数,反之为偶数。 我们要求第k层的杨辉三角形。在计算的过程中,下一层需要从上一层的杨辉三角形转移而来(dp思想?!),而上下两层奇偶不同,其长度必然不同,于是我们用2个数组不停滚动,就能正确求得要的那层杨辉三角形。 #include<bits/stdc++.h> using namespace std; int f1=1,f2=1,a,b,k,n,m,ans,yh[1005]= {0,1},yh2[1005]= {0,1}; void yanghui(int x) { if(x%2==0)//层数为偶数 for(int i=2; i<=x+1; i++)//为什么i=2开始?因为杨辉三角形每层的第一个数必定是1 yh2[i]=(yh[i-1]+yh[i])%10007;//从上一层下来 else if(x%2==1)/

2019.11.09考试解题报告

流过昼夜 提交于 2019-12-04 06:17:44
总结 期望得分: \(100+ 30 + 40 = 170\) 实际得分: \(100 + 50 + 40 = 190\) 简单记录一下 思路&&代码 T1 \(n^2算法\) #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int A = 1e5 + 11; const int B = 1e6 + 11; inline int read() { char c = getchar(); int x = 0, f = 1; for( ; !isdigit(c); c = getchar()) if(c == '-') f = -1; for( ; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48); return x * f; } int n, m, all, cnt; int d[A], w[A], a[A], la[A]; inline bool check(int x) { memset(la, 0, sizeof(la)); for(int i = 1; i <= n; i++) a[i] = d[i]; for

浅谈【树】的数据生成

孤人 提交于 2019-12-04 05:31:09
本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 如何让一份自己写的程序跑一遍随机造的数据,这时我们要用到 数据生成。 本文只介绍 树的生成 ( 我是不会告诉你我现在只会树 ) 题目 : 传送门 普通树 的生成:( 随机生成10个数据 ) 注意: 最后 第10个数据 要 手动调试 ,虽然我也不知道为什么。 以下 上半部分是树,下半部分是题目要求 。 code: 1 #include<iostream> 2 #include<stdlib.h> 3 #include<time.h> 4 inline int random(int x) { 5 return (rand()*RAND_MAX+rand())%x; 6 } 7 inline int rendom(int l,int r) { 8 return (rand()*RAND_MAX+rand())%(r-l+1)+l; 9 } 10 using namespace std; 11 int main(){ 12 // freopen("bbb.in","r",stdin); 13 srand(time(0)); 14 char si[]="bbb1.in",so[]="bbb1.out"; 15 for(int i=1;i<=10;i++) { 16 freopen(si,"w",stdout); 17 si[3]

2019.11.9 csp-s 考前模拟

蓝咒 提交于 2019-12-04 03:36:16
2019.11.9 csp-s 考前模拟 是自闭 少女 lz /lb(泪奔 T1 我可能 (呸,一定 是唯一一个把这个题写炸了的人 题外话: 我可能是一个面向数据编程选手 作为一个唯一一个写炸T1的人,成功通过多组数据将自己的代码改对/(苦笑 SOLUTION: 对于某个排列的下一个排列,通过 我也不知道是感性还是“李”性李姐 ,我们可以知道,它一定将当前排列最靠后的一个顺序对变成逆序对 倒着看就是找最小的一组逆序对 可以这样理解,从后往前看这个序列,当出现 \(a_i<a_{i+1}\) 时(由 \(a_n\to a_{i+1}\) 看a的值是递增的),就一定会出现一个逆序对 然后我们在 \(a_{i+1} \to a_n\) 中找到最小的 \(>=a_i\) 的数,交换它们的位置,然后将 \(a_{i+1}\to a[n]\) 的数按从小到大排序即为答案。 感性李姐 以下是鄙人的垃圾归并排序式代码: #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; inline int read() { int ans=0; char last=' ',ch=getchar(); while(ch>'9'||ch<'0') last=ch,ch

考试整理

大憨熊 提交于 2019-12-04 02:11:34
考试整理 ​ 今天真 不错 进行了一波模拟考试 T1 小 R 与排列 其实 \(next\_ permutation\) 还是很好用的,但是他不让(我就呵呵了 我们可以考虑一下一个性质: 要是想求下一个排列需要从最后一位往前找,找到后 \(x\) 位的数列他不是那 \(x\) 个数的最后一个排列(难♂以描述) 其实就是手动的模拟 \(STL\) 中 \(next\_permutation\) 的实现就是了 在当前序列中,从尾端向前寻找两个相邻元素,前一个记为 \(*i\) ,后一个记为 \(*t\) ,并且满足$*i $< \(*t\) (这样 \(*t\) 后面的数都是递减的)。然后再从尾端寻找另一个元素 \(*j\) ,如果满足 \(*i < *j\) ,即将第 \(i\) 个元素与第 \(j\) 个元素对调(这样 \(*t\) 后面的数仍然保持递减),并将第 \(t\) 个元素之后(包括 \(t\) )的所有元素颠倒排序,即求出下一个序列了。 \(next\_permutation\) 的函数原型如下: template<class BidirectionalIterator> bool next_permutation( BidirectionalIterator _First, BidirectionalIterator _Last ); template<class

codeforces #586 ABC~D

心已入冬 提交于 2019-12-04 02:05:30
A. Cards Description 给定一个仅由onezr组成的字符串,one-1,zero-0。 问能组成的最大的数值是多少。 Solution 模拟贪心。 B. Multiplication Table Description 给定一个$n \times n$的矩阵m,其主对角线上元素为0。 求一个a向量使得$a[i] \times a[j] = m[i][j] ,i !=j$。 Solution $a[i] \times a[j] =m[i][j],a[i] \times a[k] = m[i][k] a[j] \times a[k] = m[j][k] \rightarrow a[i]^2=\frac{m[i][j] \times m[i][k]}{m[j][k]}$ C. Substring Game in the Lesson Description Solution 显然r不能增大。 那么只要左边存在一个子串字典序小于s[k],那么Ann跳到最左一个即可。 1 #include <algorithm> 2 #include <cctype> 3 #include <cmath> 4 #include <cstdio> 5 #include <cstdlib> 6 #include <cstring> 7 #include <iostream> 8

机房测试:折半+二分+判环+树上开桶

一世执手 提交于 2019-12-03 20:49:47
T1: 分析: 如果x小的话,就直接背包。这道题中n很小,60%可以直接3^10暴搜,25的呢?明显是折半嘛。 先搜前一半的物品,用 map 记录能拼凑出的种类数,再搜后一半物品,直接查询统计答案即可。 #include<bits/stdc++.h> using namespace std; #define N 50 #define ll long long #define ri register int ll a[N],b[N],maxn[N],n,x,ans=0,n1,n2; map<ll,int> mp; int get(ll x) { int cnt=0; while(x){ cnt+=(x&1); x>>=1; } return cnt; } void dfs1(int now,ll tot) { if(now>n1) { mp[tot]++; return ; } if(tot>x) return ; dfs1(now+1,tot+a[now]); dfs1(now+1,tot+b[now]); dfs1(now+1,tot); } void dfs2(int now,ll tot) { if(now>n2) { ans+=mp[x-tot]; return ; } if(tot>x) return ; dfs2(now+1,tot+a[now]); dfs2(now

洛谷 P1854 花店橱窗布置 题解

[亡魂溺海] 提交于 2019-12-03 17:28:02
洛谷 P1854 花店橱窗布置 题解 Analysis 给定一个f*v的矩阵 要求从第一行走到第f行,每行取走一个数, 且该行所取的数必须必上一行所取的数的列数大 , 求所能取走的最大值 注意每一行所取走的数字的列数必须大于等该行的行号 因为必须给前面的花留下足够的花瓶 同理每一行所能取的最大的花瓶号必须小于等于v-(f-该行行数) 由此我们便可以很容易的得出状态转移方程 dp[i][j]=max(dp[i-1][k])+d[i][j](k<j) d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ k ] ) + d [ i ] [ j ] ( k < j ) 其中 dp[i][j] d p [ i ] [ j ]表示从第一行走到第i行并取走该行第j个数所能取得的最大值 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stack> 6 #define int long long 7 #define maxn 100+10 8 #define INF 9223372036854775807 9 using namespace std; 10 inline int read() 11 { 12 int x=0; 13

[考试反思]1105csp-s模拟测试102: 贪婪

筅森魡賤 提交于 2019-12-03 16:52:29
还是有点蠢。。。 多测没清空T3挂40。。。(只得了人口普查分20) 多测题要把样例复制粘两遍自测一下防止未清空出锅。 然而不算分。。。 其实到现在了算不算也不重要了吧。。。 T1:你相信引力吗 维护最大值关系:肉眼可见的单调栈/队列。(刚开始认为是栈,后来其实发现是一个队列) 环,经典套路,拆成两倍长的序列。 维护一个单调不增的单调栈,根据题目含义画画图,可以发现答案是: 对于当前点,从栈里第一个严格大于当前元素的值开始数,栈里有多少个元素。 暴力思路就是二分。 可以发现你找到的那个元素后面的部分都会被弹掉,所以一边弹一边计数即可。 特殊的一点是权值相同的,这部分不会被弹栈,但是对答案也有贡献。 所以在每个元素入栈的时候记录一下栈顶有几个连续相同的元素即可。 然后还要考虑找到第一个比当前元素大的元素,所以检查一下栈底的元素是否比当前元素大,如果大的话再累加1个答案。 然后还要考虑环拉成序列以后同一个位置的元素可能在栈里出现2次。 所以就不是栈了,是个队列。如果队首元素的下表就是当前的下标,那么就弹出。 弹出的时候要考虑它对“栈里连续相同元素数量”的影响。 还有一个问题,如果对于一对冰锥,它的优弧和劣弧都满足条件,那么它的答案会被计算两次。 如果最大值出现了k次,那么它对答案产生的多出的贡献就是$\frac{k(k-1)}{2}$ 特别的,当k=1时,如果次大值出现了j次

codeforces #598 div3 ABCDF

爱⌒轻易说出口 提交于 2019-12-03 15:20:19
A. Payment Without Change Description 给出a个价值为n的硬币和b个价值为1的硬币,问凑出来s元钱。 Solution $/lfloor s/n /rfloor /times n + b \geq s$ 我还憨憨写了个二分。结果只是因为爆int。 1 #include <algorithm> 2 #include <numeric> 3 #include <cctype> 4 #include <cmath> 5 #include <cstdio> 6 #include <cstdlib> 7 #include <cstring> 8 #include <iostream> 9 #include <map> 10 #include <queue> 11 #include <set> 12 #include <stack> 13 #if __cplusplus >= 201103L 14 #include <unordered_map> 15 #include <unordered_set> 16 #endif 17 #include <vector> 18 #define lson rt << 1, l, mid 19 #define rson rt << 1 | 1, mid + 1, r 20 #define LONG_LONG_MAX