清北考前刷题day6下午好】的更多相关文章

/* 贪心 负数一定不取 枚举最高位是1 且答案取为0的 位置, 更新答案. */ #include<iostream> #include<cstdio> #include<cstring> #define ll long long #define N 100010 using namespace std; int n; ll a[N],ans,sum[N]; char s[N]; ll read() { ll x=,f=;char c=getchar(); ;c=ge…
水题(water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每张牌长和宽分别是xi和yi.对于第二副牌的每张牌长和宽分别是aj和bj.第一副牌的第i张牌能覆盖第二副牌的第j张牌当且仅当xi>=aj并且yi>=bj.(注意牌不能翻转)当然一张牌只能去覆盖最多一张牌,而不能覆盖好多张. LYK想让两副牌的各n张一一对应叠起来.它想知道第二副牌最多有几张能被第一副牌所覆盖.…
三向城 /* 原图一定是一棵完全二叉树. 根节点是x,左节点是x*2,右节点是x*2+1 转化为二进制往左右走就很明显了. */ #include<iostream> #include<cstdio> #include<cstring> #define ll long long using namespace std; int T,x,y,k,ans,pos; inline int read() { ,f=;char c=getchar(); ;c=getchar();…
/* 可以并查集维护 可以发现,某个联通快出现大于等于2个环,一定无法分配. 有解要么一个环,要么没有环. 一个环时答案等于点数乘2(顺时针或逆时针). 没有环是树,对于一个n个点的树,方案一定有n种(不连某个点). */ #include<iostream> #include<cstdio> #include<cstring> #define N 100007 #define mod 1000000007 #define ll long long using name…
/* (4,1)*(3,1)*(2,1)的话1变成2然后一直是2 2变成1然后变成3 3变成1然后变成4 4变成1 */ #include<iostream> #include<cstdio> #include<cstring> #define N 1007 using namespace std; int n,m,p,k,ans,cnt,tmp; int a[N],pos[N]; struct node{ int len,q[N]; }s[N]; inline int…
/* 辗转相除,每次计算多出现了几个数. */ #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #define ll long long using namespace std; ll a1,a2,a3,a4,ans; inline ll read() { ll x=,f=;char c=getchar(); ;c=getchar();} +c-';c=getchar…
#include<iostream> #include<cstdio> #include<cstring> #include<stack> #define N 100007 using namespace std; char ch[N]; int ans,pos; stack<char>s; int main() { freopen("shower.in","r",stdin); freopen("…
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define N 1000010 using namespace std; int n,a[N],cnt1,cnt2; int read() { ,f=;char c=getchar(); ;c=getchar();} +c-';c=getchar();} ; } int main() { scanf(&quo…
  LI /* 没有考虑次大值有大于一个的情况 */ #include<iostream> #include<cstdio> #include<cstring> #define N 1000007 using namespace std; int n,m,ans,cnt,mx; int a[N]; inline int read() { ,f=;char c=getchar(); ;c=getchar();} +c-';c=getchar();} return x*f;…
/* C(n,k) */ #include<iostream> #include<cstdio> #include<cstring> #define ll long long #define N 1000007 #define M 1000000007 using namespace std; ll n,k,ans,cnt1,cnt0; ll inv[N]={,},fac[N]={,},f[N]={,}; inline ll read() { ,f=;char c=ge…
/* 做法一:按h sort一遍,对于一段区间[i,j],高度花费就是h[j]-h[i] 然后枚举区间,把区间内C排序,一个一个尽量选即可. n^3logn 标算:n^3 dp 高度排序,保证从前往后调. f[i][j]表示当前在第i栋楼,已经跳了j次楼的最小话费.转移枚举下一次跳那座楼. f[k][j+1]=min(f[i][j],f[i][j]+h[k]-h[i]+c[k]);最后枚举f[i][j]<T,ans=max(ans,j). */ #include<iostream> #i…
立方数(cubic) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数. 现在给定一个数P,LYK想要知道这个数是不是立方数. 当然你有可能随机输出一些莫名其妙的东西来骗分,因此LYK有T次询问~ 输入格式(cubic.in) 第一行一个数T,表示有T组数据. 接下来T行,每行一个数P. 输出格式(cubic.out) 输出T行,…
/* 这是什么题... */ #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> #define N 100007 #define ll long long using namespace std; ll n,m,cnt; ll a[N],b[N]; inline ll read() { ,f=;char c=getch…
期望得分:100+100+30=230 实际得分:100+100+30=230 1. 三向城 题目描述 三向城是一个巨大的城市,之所以叫这个名字,是因为城市中遍布着数不尽的三岔路口.(来自取名力为0的出题人) 具体来说,城中有无穷多个路口,每个路口有唯一的一个正整数标号.除了1号路口外,每个路口都连出正好3条道路通向另外3个路口:编号为x(x>1)的路口连出3条道路通向编号为x*2,x*2+1和x/2(向下取整)的3个路口.1号路口只连出两条道路,分别连向2号和3号路口. 所有道路都是可以双向通…
期望得分:80+30+70=180 实际得分:10+30+70=110 T1 水题(water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每张牌长和宽分别是xi和yi.对于第二副牌的每张牌长和宽分别是aj和bj.第一副牌的第i张牌能覆盖第二副牌的第j张牌当且仅当xi>=aj并且yi>=bj.(注意牌不能翻转)当然一张牌只能去覆盖最多一张牌,而不能覆盖好多张. LYK想…
2016 10 29 周六 第一天 %%%,%ZHX大神 上午,60分, 下午,爆零orz 2016 10 30 周天 第二天 炒鸡倒霉的一天 %%%,%ZHX大神 据大神第一天的题最简单. 上午,和数学有关,还要推理,转化思想,把复杂的题简单化 可是我笨QAQ 95分 下午,130 2016 10 31 周一 第三天 换老师了,看起来好老实,大一的,浙江的啊! 上午,170分 下午,150分 T1 AC :T2 20 :T3 30. 2016 11 01 周二 第四天 上午 130 下午 80…
实际得分:100+0+0=100 T1 右上角是必败态,然后推下去 发现同行全是必胜态或全是必败态,不同行必胜必败交叉 列同行 所以n,m 只要有一个是偶数,先手必胜 #include<cstdio> using namespace std; int main() { freopen("star.in","r",stdin); freopen("star.out","w",stdout); int n,m; whi…
期望得分:30+50+30=110 实际得分:40+0+0=40 并查集合并再次写炸... 模拟更相减损术的过程 更相减损术,差一定比被减数小,当被减数=减数时,停止 对于同一个减数来说,会被减 第1次减这个减数的被减数/这个减数 次 然后这个减数成为被减数,减数变为 原被减数-k*原减数,即原被减数%原减数 就变成了辗转相除 #include<cstdio> #include<iostream> using namespace std; typedef long long LL;…
期望得分:100+50+20=170 实际得分:10+50+20=80 1. 纸牌 题目描述 在桌面上放着n张纸牌,每张纸牌有两面,每面都写着一个非负整数.你的邪王真眼可以看到所有牌朝上的一面和朝下的一面写的数字.现在你需要将一些牌翻过来,使得所有牌朝上的一面中,至少有一半(≥n/2)的数字是一样的.请你求出最少需要翻几张牌,或者判断无解. 注意:在翻牌的时候,你不能把牌扔掉,不能偷偷把别的牌放进来,也不能用笔涂改牌上面的数字. 输入格式 第一行包含一个整数n,表示牌的数量: 接下来n行,每行两…
期望得分:100+100+30=230 实际得分: 正解: 枚举最高的位,这一位m是1但实际用了0 然后剩余的低位肯定是 正数就用1,负数用0 考场思路:数位DP #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long LL; #define N 100001 int a[N]; char…
T1 贪心 10 元先找5元 20元 先找10+5,再找3张5 #include<cstdio> using namespace std; int m5,m10,m20; int main() { freopen("book.in","r",stdin); freopen("book.out","w",stdout); int n; scanf("%d",&n); int x; ;i&l…
考场思路: 倒着算就是 可以对一个数-1 可以合并两个数 可以证明只有0和0才能执行合并操作 然后模拟 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define N 1000001 void read(int &x) { x=; char c=getchar(); while(!isdigit(c)) c=getchar(); +c-'; c=getc…
期望得分:100+60+70=230 实际得分:0+60+0=60 T1 可以证明如果一对括号原本就匹配,那么这对括号在最优解中一定不会被分开 所以用栈记录下没有匹配的括号 最后栈中一定是 一堆右括号然后一堆左括号 ans=栈中右括号/2 上取整 + 栈中左括号 /2 上取整 #include<cstdio> #include<cstring> using namespace std; #define N 100001 int top; char st[N]; char s[N];…
期望得分:100+30+60=190 实际得分:100+30+30=160 T1 最优方案跳的高度一定是单调的 所以先按高度排序 dp[i][j] 跳了i次跳到j 枚举从哪儿跳到j转移即可 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define N 51 struct node { int c,h; }e[N]…
期望得分:100+40+100=240 实际得分:100+40+100=240 将每个联通块的贡献乘起来就是答案 如果一个联通块的边数>点数 ,那么无解 如果边数=点数,那么贡献是 2 如果边数=点数-1,那么贡献是点数 #include<queue> #include<cstdio> #include<iostream> using namespace std; ; #define N 100001 ],nxt[N<<],tot; bool vis[…
期望得分:100+100+30=230 实际得分:0+0+0=30 T1 直接模拟 #include<cstdio> #include<iostream> using namespace std; void read(int &x) { x=; char c=getchar(); while(!isdigit(c)) c=getchar(); +c-'; c=getchar(); } } #define N 1002 int e[N][N],t[N],pos[N]; int…
期望得分:100+100+0=200 实际得分: 坐标的每一位不是0就是1,所以答案就是 C(n,k) #include<cstdio> #include<iostream> using namespace std; ; void read(int &x) { x=; char c=getchar(); while(!isdigit(c)) c=getchar(); +c-'; c=getchar(); } } int Pow(int a,int b) { ; ) ) re…
期望得分:100+100+50=250 实际得分:100+60+50=210 T2 二分 估错上界.估错复杂度 T1 立方数(cubic) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数. 现在给定一个数P,LYK想要知道这个数是不是立方数. 当然你有可能随机输出一些莫名其妙的东西来骗分,因此LYK有T次询问~ 输入格式(cub…
Task 1:小奇采药 [问题描述]  小奇是只天资聪颖的喵,他的梦想是成为世界上最伟⼤的医师.  为此,他想拜喵星球最有威望的医师为师.  医师为了判断他的资质,给他出了⼀个难题.  医师把他带到⼀个到处都是草药的⼭洞里对他说:"小奇,这个⼭洞里有⼀些不同的草药,采每⼀株都需要⼀些时间,每⼀株也有它自身的价值.  我会给你⼀段时间,在这段时间里,你可以采到⼀些草药.  如果你是⼀只聪明的喵,你应该可以让采到的草药的总价值最⼤." [输入格式]   第1 ⾏包括1 个整数T,表示数据组…