题目链接

神奇的幻方 按照题意模拟

信息传递 不难想到这是一个基环树的森林,找一个最小环就可以了

斗地主 毒瘤搜索题,时限不紧,但是要考虑全所有情况

需要注意的一些地方:

先枚举顺子、再枚举四带二、三带一/二、炸弹等

最后剩下的单牌、对子可以一次统计出来

顺子不一定越长越好,不能有2、大小王

两张王不能当成对子带出去,但可以单着被带出去

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; const int INF=0x3f3f3f3f; int T,n,a[16],ans=INF; inline bool check(){
for(int i=1;i<=14;++i)
if(a[i]) return 0;
return 1;
} void dfs(int t){
// cout<<t<<endl;
// for(int i=1;i<=14;++i)
// printf("%d ",a[i]);
// puts("");
if(t>ans) return;
if(check()){
ans=min(ans,t);
return;
}
for(int d=1;d<=3;++d){ //顺子
int m=(d==1?5:(5-d));
for(int l=1;l<=13-m;++l)
if(a[l]>=d){
int r=l-1;
while(r<12&&a[r+1]>=d){
++r; a[r]-=d;
if(r-l+1>=m) dfs(t+1);
}
for(int i=l;i<=r;++i) a[i]+=d;
}
}
for(int i=1;i<=13;++i) //炸弹/四带二
if(a[i]>=4){
int cnt=0,b[4];
a[i]-=4;
for(int j=1;j<=14&&cnt<2;++j)
if(a[j]==1) --a[j],b[++cnt]=j;
if(cnt==1) ++a[b[1]];
dfs(t+1);
if(cnt==2) ++a[b[1]],++a[b[2]];
cnt=0;
for(int j=1;j<=13&&cnt<2;++j)
if(a[j]==2) a[j]-=2,b[++cnt]=j;
if(cnt){
dfs(t+1);
a[b[1]]+=2;
if(cnt==2) a[b[2]]+=2;
}
a[i]+=4;
} for(int i=1;i<=13;++i) //三张/三带一/三带二
if(a[i]>=3){
int k=0;
a[i]-=3;
for(int j=1;j<=14&&!k;++j)
if(j!=i&&a[j]==1) --a[j],k=j;
dfs(t+1);
if(k) ++a[k];
k=0;
for(int j=1;j<=14&&!k;++j)
if(a[j]==2) a[j]-=2,k=j;
if(k){
dfs(t+1);
a[k]+=2;
}
a[i]+=3;
} int b[16],cnt=0;
for(int i=1;i<=14;++i){
b[i]=a[i];
if(a[i]) ++cnt;
a[i]=0;
}
dfs(t+cnt);
for(int i=1;i<=14;++i) a[i]=b[i];
} int main()
{
// freopen("out.txt","w",stdout);
scanf("%d%d",&T,&n);
while(T--){
ans=INF;
memset(a,0,sizeof(a));
int x,y;
for(int i=1;i<=n;++i){
scanf("%d%d",&x,&y);
if(x==0) x=14;
else if(x<=2) x+=11;
else x-=2;
++a[x];
}
dfs(0);
printf("%d\n",ans);
}
return 0;
}

跳石头 二分答案,贪心check

子串 DP,dp[i][j][k][0/1]表示搞到A的前i个字符、B的前j个字符、取了k段、第i个字符选/不选的方案数

dp[i][j][k][0]=dp[i-1][j][k][0]+dp[i-1][j][k][1]);
if(A[i]==B[j]) dp[i][j][k][1]=dp[i-1][j-1][k-1][0]+dp[i-1][j-1][k-1][1]+dp[i-1][j-1][k][1];

最后滚动数组优化空间

运输计划 毒瘤卡常题,我弃疗了,二分答案d,将所有大于d的k条路径树上差分,取被经过k次的边的最大值,判断删去这条边是否使最长的路径<=d

95pts:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; const int MAXN=300010; inline int read(){
int x=0; char c=getchar();
while(c<'0') c=getchar();
while(c>='0') x=x*10+c-'0',c=getchar();
return x;
} int n,m,f[MAXN][25],dep[MAXN],dis[MAXN]; int Head[MAXN],num;
struct Edge{
int to,w,nxt;
} e[MAXN<<1]; inline int add(int x,int y,int z){
e[++num]=(Edge){y,z,Head[x]};
Head[x]=num;
} struct Path{
int s,t,len,lca;
}p[MAXN]; inline bool cmp(Path x,Path y){
return x.len<y.len;
} void dfs(int x,int fa){
f[x][0]=fa;
dep[x]=dep[fa]+1;
for(int k=1;(1<<k)<=dep[x];++k)
f[x][k]=f[f[x][k-1]][k-1];
for(int i=Head[x];i;i=e[i].nxt){
int v=e[i].to;
if(v!=fa){
dis[v]=dis[x]+e[i].w;
dfs(v,x);
}
}
} int Lca(int x,int y){
if(dep[x]<dep[y]) swap(x,y);
for(int i=22;i>=0;--i)
if(dep[f[x][i]]>=dep[y])
x=f[x][i];
if(x==y) return x;
for(int i=22;i>=0;--i)
if(f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
return f[x][0];
} int K,diff[MAXN],maxx; int dfs1(int x){
int sum=diff[x];
for(int i=Head[x];i;i=e[i].nxt){
int v=e[i].to;
if(v!=f[x][0]){
int t=dfs1(v);
sum+=t;
if(t==K)
maxx=max(maxx,e[i].w);
}
}
diff[x]=0;
return sum;
} inline bool check(int d){
int l=1,r=m;
while(l<r){
int mid=(l+r)>>1;
if(p[mid].len>d) r=mid;
else l=mid+1;
}
K=m-l+1;
for(int i=l;i<=m;++i){
++diff[p[i].s];
++diff[p[i].t];
diff[p[i].lca]-=2;
}
maxx=0; dfs1(1);
return p[m].len-maxx<=d;
} int main()
{
n=read(); m=read();
int x,y,z;
for(int i=1;i<n;++i){
x=read(); y=read(); z=read();
add(x,y,z); add(y,x,z);
}
dfs(1,0);
for(int i=1;i<=m;++i){
x=read(); y=read();
p[i].s=x; p[i].t=y;
p[i].lca=Lca(x,y);
p[i].len=dis[x]+dis[y]-dis[p[i].lca]*2;
}
sort(p+1,p+1+m,cmp);
int l=0,r=p[m].len;
while(l<r){
int mid=(l+r)>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
printf("%d\n",l);
return 0;
}

【NOIP2015】真题回顾的更多相关文章

  1. 2016.1.4~2016.1.7真题回顾!-- HTML5学堂

    2016.1.4~2016.1.7真题回顾!-- HTML5学堂 2015悄然而逝,崭新的2016随即而行!生活需要新鲜感,学习JavaScript的过程需要有成就感!成就感又是来自于每一天的不断练习 ...

  2. 2015.12.29~2015.12.30真题回顾!-- HTML5学堂

    2015.12.29~2015.12.30真题回顾!-- HTML5学堂 吃饭,能够解决饥饿,提供身体运作机能.练习就像吃饭,强壮自己,提升编程技能,寻求编程技巧的最佳捷径!吃饭不能停,练习同样不能停 ...

  3. 2015.12.21~2015.12.24真题回顾!-- HTML5学堂

    2015.12.21~2015.12.24真题回顾!-- HTML5学堂 山不在高,有仙则名!水不在深,有龙则灵!千里冰封,非一日之寒!IT之路,须厚积薄发!一日一小练,功成不是梦!小小技巧,尽在HT ...

  4. 【NOIP2014】真题回顾

    题目链接 生活大爆炸版石头剪刀布 就是个模拟,不说了 联合权值 枚举每个点,统计它任意两个儿子的联合权值,统计的时候维护sum和max就行了 飞扬的小鸟 比较好的DP题,不难想到用dp[i][j]表示 ...

  5. 2019年京东Java研发岗社招面经(面试经历+真题总结+经验分享)!

    本篇先以日历形式回顾秋招之路,方便各位参考某厂的处理进度:然后是总结归纳春秋招Java面试题库:最后做个总结还有展望,开始新的征程~ 面试经历京东面试真题面试经验分享1.面试经历 2018年的冬季特别 ...

  6. Noip前的大抱佛脚----Noip真题复习

    Noip前的大抱佛脚----Noip真题复习 Tags: Noip前的大抱佛脚 Noip2010 题目不难,但是三个半小时的话要写四道题还是需要码力,不过按照现在的实力应该不出意外可以AK的. 机器翻 ...

  7. 历年NOIP真题总结

    前言:最近把历年的NOIP真题肝了一遍(还有3个紫题先咕掉了),主要是到1998年的提高组的题.把题目的做题简要思路搁在这儿,一个是为了考前翻一翻,想想自己的哪些思路要梳理的什么什么的,反正怎么说呢, ...

  8. NOIP真题索引

    NOIP真题索引 NOIP2019 Day 1 格雷码 括号树 树上的数 Day 2 Emiya 家今天的饭 划分 树的重心 NOIP2018 Day 1 铺设道路 货币系统 赛道修建 Day 2 旅 ...

  9. 网易实习笔试真题C/C++

    刚做的时候根本就没有想到解题思路,刚好看到了别人的思路,自己写了一下.里面对unordered_map及vector二维数组的建立很灵活,另外区别了一下map,unordered_map,hash_m ...

随机推荐

  1. vim安装 YCM 过程记录

    YCM(YouComplateMe) 属于Vim中大神级的插件,提供了类似于巨硬爸爸的VS中的代码补全,但是其安装方式也是比较复杂,因此特意写下一篇记录,记录下我自己如何安装这一插件的过程: 检查自己 ...

  2. string.Compare()方法

    判断字符串中是否包含一个值 返回一个值,该值指示指定的 String 对象是否出现在此字符串中. String a = "abcd"; if(source.a("a&qu ...

  3. 常用正则表达式和一些demo

    一.校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ ...

  4. 所有子模块都要执行的checkstyle检查

    <!-- 所有子模块都要执行的checkstyle检查 --> <plugin> <groupId>org.apache.maven.plugins</gro ...

  5. Centos复制的系统无法获取IP地址

    本文主要是解决自己玩虚拟机时遇到的问题,网上查询了很多资料,最好综合多方的资料进行如下总结,如果无法解决您得问题,不要着急慢慢梳理总会解决的,加油~~~ 1.添加一块新的虚拟机的网卡2.删除rm -r ...

  6. spring中bean的作用域属性singleton与prototype的区别

    1.singleton 当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会 ...

  7. Flask第三方组件 之 Flask-Session

    原生session:交由客户端保管机制,安全性相对较差,优势是一点都不占用服务器空间 Flask-Session: 解决原生session的劣势 安装包 from flask import Flask ...

  8. Objective-C 知识点拾遗

    -- :: UIWebView的使用总结 UIWebView全解

  9. RTSP协议介绍 (转)

    1. 实 时流协议RTSP RTSP[3]协 议以客户服务器方式工作,它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制,如:暂停/继 续.后退.前进等.因此 RTSP ...

  10. 巧用浏览器F12调试器定位系统前后端bug-转载

    做测试的小伙伴可能用过httpwatch,firebug,fiddler,charles等抓包(数据包)工具,但实际上除了这些还有一个简单实用并的抓包工具,那就是浏览器的F12调试器. httpwat ...