08 2016 档案
摘要:/* 如果是查询[2,4] 就是a2+a3+a4 a2+a3 a2 显然裸地线段树算不出来 我们维护前缀和 那查询的时候还要减去前多计算的 */ #include #include #include #define maxn 100010 #define ll long long using namespace std; ll n,m,tot,a[maxn],s[maxn],x,y,z; st...
阅读全文
摘要:/* 高中最后一个暑假 挺有意义的 考了一暑假的试 最后总结一下吧 一天一天来吧 7.30 这一天的题有点变态啊 不过难题有难题的做法 T1斗地主 考试的时候打了0分 0分..... 原因好像是读入的格式错了 每次重新读n 认真读题.认真读题.认真读题 其实就算读进来了也只是25分的基础分 连那种赤裸裸的暴力都没打出来 暴力的水平还要提高啊.... 正解嘛 很机智 很简洁 不说了 T2虫...
阅读全文
摘要:/* 比较简单的A* 估价函数很简单就是除了左上角的联通快之外的不同的个数 加上迭代 好像答案最多在16步之内出解 这样裸裸的交上去是50分 在考虑剪枝 每个选颜色的时候一定是选左上角联通快附近的颜色 处理一下只枚举这样的颜色 80 - 90 分了就 下面是代码 */ #include #include #include using namespace std; int n,ans,g[9]...
阅读全文
摘要:/* 暴力查分 n*n */ #include #include #include #define maxn 100010 using namespace std; int n,m,a[maxn],ans,p[maxn][31],r[31]; int main() { scanf("%d%d",&n,&m); for(int i=1;i #include #include #i...
阅读全文
摘要:/* 很容易想到f[i][j][k][l][01] 表示到ij点 两个人得分为kl 01表示这一步谁走的 因为起点不同 路径不同 所以要枚举起点.. 时间复杂度 O(nmk*nmk) 空间复杂度 O(2*nmkk) 超时爆空间..... 40分 */ #include #include #include #define maxn 810 #define mod 1000000007 usi...
阅读全文
摘要:/* 考试的时候没想出正解 也没打暴力 时间不够了 随便yy了几种情况按出现的先后顺序处理而没有贪心 的了20分 不粘了 正解是围绕首都的儿子来搞的 显然先二分答案 对于每个限定的最大时间 我们尝试着那每个军队向根节点蹦 能蹦到的记下来最靠近根的点 并记下剩下多少时间 不能蹦到的 记下能蹦到哪里 并且标记为已有军队 最后updata一下不能蹦到的 说不定可以蹦到首都的儿子 或者首都的儿子的儿子都...
阅读全文
摘要:/* 对于n为密码想要序列最短 那么 1234 2345 这两个一定挨着 就是说 前一个的后n-1位是后一个的前n-1位 假设n==3 我们用0-99作为点的编号建图 然后每个点连出去10条边 两个相邻点有n-1个是重复的 边的权值可用两个点计算 比如 12 23 权值为123 123 234 权值为1234 显然最后的序列是每个边记录一次 也就是跑欧拉路 对于记录下的边权 第一条输出前n-1...
阅读全文
摘要:/*翻译好题意 n个变量 不超过m*2句话*/ #include #include #include #include #define maxn 200010 using namespace std; int n,m,f[maxn],c,s[maxn],age[maxn],sum,a,b; vectorG[maxn]; bool Judge(int a,int b) { if(age[a...
阅读全文
摘要:/* 裸地2-SAT问题 关键是模型转化 最小的最大 显然二分 关键是Judge的时候怎么判断 每个航班是早是晚直接影响判断 早晚只能选一个 如果我们定义bool变量xi表示 i航班是否早到 每个航班虚拟出两个点2*i 2*i+1 分别表示是否早到 然后就可以假设某个航班早到然后推导出一定连得某些边 然后就开始选点 尝试这个点选不选 看看最后是否合法 */ #include #include...
阅读全文
摘要:/*每个环 要么不选 要么全选 可缩点 就得到一个GAD图 然后搞搞算出最大路径*/ #include #include #include #define maxn 100010 using namespace std; int T,n,m,num,head[maxn],low[maxn],dfn[maxn],s[maxn],top,vi[maxn]; int sum,belong[maxn],...
阅读全文
摘要:/*哈哈我Tarjan套lca.. 丫输出case啥的没看见...*/ #include #include #include #define maxn 300010 using namespace std; int n,m,num,head[maxn],low[maxn],dfn[maxn],topt; int s[maxn],top,f[maxn],sum,belong[maxn],cnt,c...
阅读全文
摘要:/*重边不能删 不能删 不能删...*/ #include #include #include #define maxn 10010 using namespace std; int n,m,num,head[maxn],low[maxn],dfn[maxn],topt; int top,s[maxn],f[maxn],ans,sum,belong[maxn],r[maxn]; struct n...
阅读全文
摘要:/*set加速维护*/ #include #include #include #include #define maxn 100010 using namespace std; sets; set::iterator p; int n,m,a[maxn],top; char c[10]; int init() { int x=0,f=1;char s=getchar(); whi...
阅读全文
摘要:/*双向bfs (得分和单项的一样多....)70*/ #include #include #include #include #define maxn 35 #define maxm 810010 using namespace std; int n,m,q,g[maxn][maxn]; int X,Y,sx,sy,ex,ey,falg,vis[maxn][maxn]; int xx[4]={...
阅读全文
摘要:/* 我是不会说我考试的时候想到了正解却把金币取大看成金币求和的.... 觉得只按左右手乘积排序不太对 有反例 也可能我反例放到这个题里是错的吧 按自己的理解排的序 就是各种讨论... 假设 第i个人是x1 y1 第i+1个人是x2 y2 前面所有的左手乘积为S 我们通过考虑这两个人决定排序的规则 答案就是 min(max(S/y1,S*x1/y2),max(S/y2,S*x2/y1)) 拿掉...
阅读全文
摘要:/* 状态定义的没错 就是考试的时候傻啦吧唧的转移左右孩子 其实之转移父亲就简单多了 不用考虑那么多 还有就是偷懒没有把谁有没有找过这个信息转过去 而是搞了个全局变量…wa到挺 再就是特盘的时候还有终止条件写的不好 写的时间也很长 ….. */ #include #include #include #define maxn 510 #define inf 0x3f3f3f3f using nam...
阅读全文
摘要:/*机智sort二维转一维*/ #include #include #include #include #define maxn 50010 using namespace std; int n,s,num,c[maxn*6]; struct node { int l,r; }a[maxn*6]; int cmp(const node &x,const node &y) { if...
阅读全文
摘要:/* 表示很遗憾.. 开始状态想的没错 就是转移的时候出了问题 自己也想到了数组平移 然而没往下写 与正解擦肩而过…. 然后为了好转移写了个4维的 时间不多了没来得及降维 草草的算算空间就交了… 尼玛double忘记*8了 华丽的直接Memory limit exceeded while compiling 我尼玛0分 考试后写了写用原来的状态写了写数组平移然后降维 数据太水就A了 */ #i...
阅读全文
摘要:这题之前做过…先听后做的 所以直接打了优化的dp、 然而不是自己想的方法还是理解的不好 一直75分 wa到挺 今天考试看到暴力dp70分 很自信加上点 continue break啥的就80+了 比优化的dp得分多 机智的我哈哈哈….. 然而手残了..枚举k次蹦跶结果转移的时候我特么都是+1不是+k 悲伤的我眼泪掉下来….. 然后改过来就80了 又不好办了.. 下面是80分代码 #include...
阅读全文
摘要:/* 好神奇好神奇...表示自己要学的还很多 注意到n #include #include #define maxn 520 using namespace std; int n,K,v1[maxn],v2[maxn][maxn],cnt[maxn]; long long ans,f[10][100][maxn]; void Get_v() { for(int i=0;i>1))==0)...
阅读全文
摘要:/* floyd 传递闭包 开始Floyd 之后统计每个点能到的或能到这个点的 也就是他能和几个人确定胜负关系 第一批要有n-1个 然后每次减掉上一批的人数 麻烦的很 复杂度上天了.... 正难则反 我们考虑一定不能确定排名的 */ #include #include #include #define maxn 110 using namespace std; int n,m,f[maxn]...
阅读全文
摘要:/* 一开始想的二维的 只维护第几只牛还有圈数 后来发现每只牛的能量是跟随每个状态的 所以再加一维 f[i][j][k]表示第i只牛 领跑的j全 已经消耗了k体力 转移的话分两类 1.换一只牛领跑 那么就从f[i][j][k]转移到f[i+1][j][j] 2.不换 那就枚举i领跑几圈l f[i][j-l][k-l*l]转移到f[i][j][k] 时间++ */ #include #inc...
阅读全文
摘要:/* 一开始并没有想出On的正解 后来发现题解的思路也是十分的巧妙的 还是没能把握住题目的 只有1 2这两个数的条件 dp还带练练啊 ... */ #include #include #include #define maxn 100010 using namespace std; int n,a[maxn],Q[maxn],H[maxn],ans=0x7fffffff; int main()...
阅读全文
摘要:/* 需要好大的空间..... 而且lowbit理解的不是很好 先放到博客里 以后慢慢研究 */ #include #include #include #include #define inf 999999999; #define maxn 1050000 using namespace std; int n,a[maxn]; double x[30],y[30],g[30][30],f[m...
阅读全文
摘要:/* f[i][j] 表示走过的点构成i状态 且最后到达的点为j时的最优解 在那最后一个状态就是(1 #include #include #define maxn 100010//最少到 1<<16 using namespace std; int n,g[20][20],f[maxn][20],ans=0x3f3f3f3f; int main() { scanf("%d",&n); ...
阅读全文
摘要:/*考场上写的暴力 40分钟70分*/ #include #include #include #define base 1000000000 #define maxn 100010 #define ll long long using namespace std; ll n,m,h[maxn],X,A[maxn],B[maxn],st,ans; bool falg; double mii=ba...
阅读全文
摘要:/* 这题10^8的暴力可以出答案 但是 慢..... 有个小小的bug 出题人卡int 却没注意short 用short可以不用hash 直接搞 49428K 313MS */ #include #include #include #define base 12500000 using namespace std; int a1,a2,a3,a4,a5,x1,x2,x3,x4,x5,ans; ...
阅读全文
摘要:开始按hash做的 交上去就wa 但是和标称拍了半天也没有不一样的 可能是生成的数据太水了吧... #include #include #include #define maxn 100010 #define mod 10000007 #define ll long long using namespace std; ll ha; int n,a[maxn][6],base,J[7]; bool...
阅读全文
摘要:/*虽然这暴力剪了又剪 改了又改 还是初始的20分...*/ #include #include #include #define maxn 2010 using namespace std; int n,sum,c[maxn],ans,p,t1,t2,c1,c2,f[maxn]; void Dfs(int now,int cost) { if(cost>=ans)return; ...
阅读全文
摘要:/*普通的hsah 由于元素太多 空间很小..hash碰撞很厉害.30分*/ #include #include #include #include #define maxn 100010 #define mod 2000007 #define hs 117 using namespace std; int n,l,k,cnt,f[mod+10],l1[maxn],l2[maxn]; char ...
阅读全文
摘要:/*数论题 考察唯一分解定理 当然用到一些技巧*/ #include #include #include #define maxn 30010 using namespace std; int n,m1,m2,prime[maxn],num,mi[maxn],S,s[maxn],ans=0x7fffffff,cnt; bool f[maxn]; void Get_prime(int x) { ...
阅读全文
摘要:/*10分钟的暴力 意料之中的5分..*/ #include #include #include #define maxn 1010 using namespace std; int n,m,p,g[maxn][maxn],w[maxn],ans; void Dfs(int now,int v) { if(now>m){ans=max(ans,v);return;} for(in...
阅读全文
摘要:/*暴力+乱搞 55分(似乎只有暴力得分了)*/ #include #include #include #include #include #define maxn 1000010 using namespace std; int n,m,num,head[maxn],dfn[maxn],low[maxn],s[maxn],top,f[maxn]; int sum,topt,c[maxn],di...
阅读全文
摘要:/* 矩阵稍微有点难搞 不过也是可以推出来 注意防爆... */ #include #include #include #define ll long long using namespace std; ll n,mod,p,q,r,t,u,v,w,x,y,z; ll f[12][12],a[12][12]; ll slow_mul(ll a,ll b) { ll ans=0; ...
阅读全文
摘要:/*考试想了2小时二分 最后写的15分钟暴力....34分*/ #include #include #include #include using namespace std; int n,m,k,cnt,ks[11],sk[11]; string s,si; void Get_s(int x) { string sd; while(x)sd+=char(x%10+'0'),x/...
阅读全文
摘要:/*暴力30分*/ #include #include #include #include #define maxn 100010 using namespace std; int n,l=0x7fffffff,r=-0x7fffffff; int s,ans1[maxn*5],ans2[maxn*5],h[maxn]; struct node { int li,ri,hi; }p[ma...
阅读全文
摘要:/* 状态f[i][j][k] 表示A串匹配到i B串匹配到j 用了k个子串 转移的话 f[i][j][k]=f[i-1][j-1][k]+f[i-1][j-1][k-1]分别表示i是不是建立了一个新的子串 当然这是我们会发现 这样的状态是默认了i用了 显然i可以不用 也就是说这样就遗漏了许多状态 我们重新定义一下他 加一维01表示i用了没用 f[i][j][k][0或1] 这样转移就要分开考虑...
阅读全文
摘要:#include #include #include #define maxn 2010 using namespace std; int n,m,v[maxn],sum[maxn],son[maxn][maxn],s[maxn][3],f[maxn][maxn]; bool falg[maxn]; int Dfs(int k,int p) { if(k==0&&p!=m||p==0)r...
阅读全文
摘要:/* 不要思维定视 盯着线段树维护l r 的ans不放 显然没法区间合并 换一种思路 如果打暴力的话 O(nm) 每次询问 扫一遍之前所有的修改 有交点则说明种数++ 接下来考虑如何优化 我们把每个区间看做(l,r)的坐标内的点 然后查询区间L=l 所以l轴的[r+1,n] +r 轴的[1,l-1] 恰好不重复且覆盖了所有多出来的点 */ #include #include #includ...
阅读全文

浙公网安备 33010602011771号