关闭

[置顶] qb neighbor

#include #include using namespace std; int n,m,maxn; int a[19999],b[19999],h[299999],h2[299999]; int ans,s; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&...
阅读(249) 评论(0)

[置顶] 伊吹萃香

网上竟然没有能看的懂的解释,我也是醉了 搞了好几个小时才找着一份代码,硬是看懂了 思路:记一个dis[i][j]数组,i表示节点,j表示时间是奇数还是偶数,0是偶数,1是奇数 某一个点的状态是由上一秒转移来的,而这两秒一定一个是奇数一个是偶数,所以1状态由0转移,0状态由1转移,黑洞需要翻转,而奇数秒的状态一定是被反转了的,偶数是没反转的,而这个可以用异或来搞定 因为0^1=1,1^1==0...
阅读(205) 评论(0)

[置顶] 狐狸分奶酪(codeforces 371b)

很容易想到的一个思路是暴力,就是对多的蛋糕吃,进行bfs(); 一旦两种蛋糕相等,就是最小步数的,很容易写。 还有更好的方法,很容易看出,最后的解一定是它们的最大公约数,然后把他们的最大公约数去掉,看看能不能吃成1,记下步骤,也可以看能不能吃成最大公约数,是一样的。#include #include #include #include<que...
阅读(280) 评论(0)

[置顶] SDOI 游记

去拿了10份就回来了。。。。。。。。。。...
阅读(82) 评论(1)

[置顶] 最大正方形

dp 处理一个矩阵前缀和,就可以O(n)的求出矩阵的和了,而且只有和为完全平方数才是正方形,因为数据只有1吗,要是不是一的话就不容易了 这样再枚举一个起点,和一个边长就是任意一个正方形了,再优化剪枝一下,就可以0ms过了#include #include using namespace std; int n,m;int maxn=1; int a[101][...
阅读(167) 评论(0)

[置顶] 清北 游

#include #include #include #include #include #include #include #include #include #include #include #define M...
阅读(158) 评论(0)

[置顶] 银河英雄传说

#include #include #include #include using namespace std; int t; int q[99999]; int h[99999]; int f[99999]; int find(int x) { if(f[x]==x)return x; int fx=fin...
阅读(148) 评论(0)

2016noip提高组day1 换教室

做这个题要先搞懂期望。。。 我还是不懂什么是期望。。。 但好像这个题的期望是距离乘概率。。。 所以这就是个期望dp f[i][j][0,1] 表示到i时间段,选了j个教室,选不选当前的教室 所以 有四种情况,前面选后面不选,前面选后面选,前面不选后面选,前面不选后面不选 方程就是f[i][j][0]=min(f[i-1][j][0]+dis[c[i-1]][c[i]],f[i-1][j...
阅读(13) 评论(0)

qbday1

这个题用前缀和模拟,1*1,2*2,3*3,4*4,5*5-2*1 ,3*2, 4*3 ,5*4 ,6*5 你会发现少了个1-4的和,多了个5*6 所以维护前缀和就行了 #include #include using namespace std; int s[1100000],n,k,a[1199999]; long long ans,tot; int ma...
阅读(8) 评论(0)

运输计划

这个题和疫情控制差不多,但那个题更恶心。 先二分答案,找需要减少的边,看他们有没有一条边是一样的 如果没有的话,肯定不行,如果有的话,看删掉最大的能不能让所有的路大于答案 树上的最短边就是到公共祖先的距离,这里用tarjan求得,也可以用倍增,不会的话看前面的博客 找一条边经过多少次用差分 把两个节点+一就代表这两个叉上的点都走过一遍,可是祖先上面的点没有走,所以把祖先-2,求树的后缀和就...
阅读(19) 评论(0)

疫情控制

#include #include #include #include #define ll long long using namespace std; const int M=51000; struct st{ ll rest,id; }; st a[M],b[M]; ll vis[M],used[M],de...
阅读(12) 评论(0)

愤怒的小鸟

一道状压dp题 把猪压缩为二进制,1代表能打死,0代表不能 然后预处理出任意两个猪组成的曲线,能打死那些猪,然后转移时或一下就行了 dp[i|bit[i][j]]=min dp[i]+1; 一个猪的预处理。#include #include #include #include using namespace std; in...
阅读(29) 评论(0)

加分二叉树

想不到dp,写了个暴力,用记忆化搜索优化a了 枚举一个根,求出子树的最大值,记录下来,一点点向下 输出序列就记录下每个区间最大值的根,从他向下分,输出#include #include using namespace std; int n,a[19999],toto,ans2[199999],dep[1999][1999],dp[1999][1999]; in...
阅读(18) 评论(0)

飞扬的小鸟

dp 70%的方程很好想,100%的你可以先跳一次,再把上一次要跳的弄到后面去挑,因为这样你要先枚举矮的,从矮的向高处跳,而且这样你就可以从前一个的没管的位置向这跳,所以你要枚举这一个和前一个下管子的最小到上管子最大,才不会漏,而且你不能掉下来再跳,所以两个不能一块转移,最后掉,还有跳到m的,和上面一样的想法#include #include #includ...
阅读(16) 评论(0)

子串

f是指选i这一位,sum是不选 然后选着一位的就等于选上一位地加上不选上一位的,选上一位的可以分为两种,独立成块的和不独立的 不选的就是之前所有的方案 然后把第一位滚动一下就行了#include #include #include using namespace std; int f[2][1999][1999],sum[2][1999][...
阅读(17) 评论(0)

选择客栈

这个题可以枚举一个客栈,然后找后面第一个小于p的客栈 那么这个客栈可以和后面的任何客栈组合,可以先记下后缀和 然后第一个小于p的客栈可以用倍增找时间复杂度为o(nlogn)或O(nk),后来我才发现这不是#include #include #include using namespace std; int n,k,p,f[219999],x[...
阅读(34) 评论(0)

Vigenère 密码

模拟,这是密文,找明文#include #include #include using namespace std; char a[110],b[1100]; int main(){ //printf("%d %d",'a','A'); gets(a); gets(b); int lena=strlen(a); int...
阅读(23) 评论(0)

国王游戏

高精#include #include #include #include using namespace std; #define ll long long struct st{ ll s; ll x,w; }a[199999];ll n,tot,w,t; int s[199999],p[199999],a...
阅读(21) 评论(0)

寻找道路

因为这个题是有向图,所以联通的条件是,正反都能跑,所以反着跑一边bfs,把没跑到的打上标记,然后正着跑spfa 因为第一次我去了好几层。wa了#include #include #include using namespace std; queueq; const int M=21000,N=410000,INF=2139062143; i...
阅读(20) 评论(0)

解方程

0%任何数都是零 可以用模的周期性,f(x)%k是零,f(x+k)%k也是零,很显然,那么你就模三个质数,像哈希一样 然后推出之后的数#include #include #include using namespace std; #define ll long long const int M=11000; int n,m;ll f[100000]...
阅读(18) 评论(0)

联合权值

考虑一下,对于一个中节点,他的联合全职是所有临界点自由组合的和,也就是a*b+b*c+….. 这个值与a+b+c+。。。。有什么关系呢 2*a*b+2*b*c=(a+b+c+…)^2-a*a+b*b+c*c…… 而最大的,是最大值与次大值的组合 所以预处理处所有临界点的和,平方和,最大值次大值就行了O(n)复杂度#include #include #in...
阅读(28) 评论(0)

noip2013

day1 t1 转圈游戏(circle) 裸地快速幂。。#include using namespace std; int n,m,x,k; int fastpow(int a,int k){ int ans=1; while(k){ if(k&1) ans=(1ll*ans*a)%n; a=(1ll*a*a)%n;...
阅读(27) 评论(0)
183条 共13页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:10558次
    • 积分:1994
    • 等级:
    • 排名:千里之外
    • 原创:183篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条
    最新评论