T1 玩具谜题 题目传送门

这道题直接模拟就好了哇 233

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=1e5+;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m,k,v,ans=;
char s[M][];
int h[M];
int main()
{
n=read(); m=read();
for(int i=;i<=n;i++) h[i]=read(),scanf("%s",s[i]);//0朝内1朝外
for(int i=;i<=m;i++){
k=read(); v=read();
if(!k) v=-v;
if(h[ans]) v=-v;
ans=ans+v;
if(ans<) ans=ans+n;
if(ans>n) ans=ans-n;
}
printf("%s",s[ans]);
return ;
}

T2  天天爱跑步 题目传送门

这道题我 真的 看不懂..... 跳 以后填坑

T3  换教室  最短路+dp  题目传送门

这道题是道期望dp f【i】【j】【k】代表到第i个时段换了j个教师k代表当前点换不换(1换0不换) 然后就是一波递推了

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=;
const double inf=1e15;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m,v,s,c[M],d[M];
double k[M],f[M][M][],dis[M][M],w;
void prepare(){
for(int i=;i<=v;i++)
for(int j=;j<=v;j++)
dis[i][j]=(i==j)?:inf;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
f[i][j][]=f[i][j][]=inf;
f[][][]=; f[][][]=;
// for(int i=1;i<=n;i++,printf("\n")) for(int j=1;j<=v;j++) printf("[%.2lf %.2lf] ",f[i][j][0],f[i][j][1]);
}
void floyd(){
for(int k=;k<=v;k++)
for(int i=;i<=v;i++)
for(int j=;j<=v;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
// for(int i=1;i<=v;i++,printf("\n")) for(int j=1;j<=v;j++) printf("%.2lf ",dis[i][j]);
}
int main()
{
int x,y;
n=read(); m=read(); v=read(); s=read();
for(int i=;i<=n;i++) c[i]=read();
for(int i=;i<=n;i++) d[i]=read();
for(int i=;i<=n;i++) scanf("%lf",&k[i]);
prepare();
for(int i=;i<=s;i++){
x=read(); y=read(); scanf("%lf",&w);
dis[x][y]=dis[y][x]=min(dis[x][y],w);
}
floyd();
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(!j) {f[i][j][]=min(f[i][j][],f[i-][j][]+dis[c[i-]][c[i]]); continue;}
f[i][j][]=min(f[i][j][],f[i-][j][]+dis[c[i-]][c[i]]);
f[i][j][]=min(f[i][j][],f[i-][j][]+dis[d[i-]][c[i]]*k[i-]+dis[c[i-]][c[i]]*(-k[i-]));
f[i][j][]=min(f[i][j][],f[i-][j-][]+dis[c[i-]][d[i]]*k[i]+dis[c[i-]][c[i]]*(-k[i]));
double d1=k[i]*k[i-]*dis[d[i-]][d[i]],d2=k[i]*(-k[i-])*dis[c[i-]][d[i]];
double d3=(-k[i])*k[i-]*dis[d[i-]][c[i]],d4=(-k[i])*(-k[i-])*dis[c[i-]][c[i]];
f[i][j][]=min(f[i][j][],f[i-][j-][]+d1+d2+d3+d4);
}
}
double ans=inf;
for(int i=;i<=m;i++) ans=min(ans,f[n][i][]),ans=min(ans,f[n][i][]);
printf("%.2lf\n",ans);
return ;
}

T4  组合数问题 题目传送门

这道题 搜索打一波发现是个类似杨辉三角的东西 然后就维护一波前缀和方便计算就好了哇 其实可以跑两波实现o(1) 查询 不过 我懒啦 233

#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int M=;
LL read(){
LL ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
LL f[M][M],sum[M][M];
LL n,m,T,k,ans;
void prepare(){
for(LL i=;i<M;i++) f[i][]=;
for(LL i=;i<M;i++)
for(LL j=;j<=i;j++){
f[i][j]=(f[i-][j]+f[i-][j-])%k;
if(!f[i][j]) sum[i][j]=;
sum[i][j]+=sum[i][j-];
}
}
int main()
{
for(T=read(),k=read(),prepare();T;T--){
n=read(); m=read(); ans=;
for(LL i=;i<=n;i++) ans=ans+sum[i][min(i,m)];
printf("%lld\n",ans);
}
return ;
}

T5  蚯蚓 题目传送门

这道题其实就是维护三个队列q1是原队列 按从小到达sort一波 以后都不会有更新了 q2,q3分别储存砍完的前后半段 可以证明两个队列都是单调递减的 然后整体的加转化成个体的减的好了

#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int M=1e7+;
LL read(){
LL ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
LL n,m,q,u,v,k;
LL h1=,h2=,h3=,t2,t3;
LL q1[M],q2[M],q3[M];
bool cmp(LL a,LL b){return a>b;}
LL push_max(LL x){
LL sum=-0x3f3f3f3f3f3f3f3f;
if(h1<=n) sum=max(sum,q1[h1]);
if(h2<=t2) sum=max(sum,q2[h2]);
if(h3<=t3) sum=max(sum,q3[h3]);
if(h1<=n&&q1[h1]==sum) h1++;
else if(h2<=t2&&q2[h2]==sum) h2++;
else h3++;
//printf("[%lld]\n",sum+q*(x-1));
return sum+q*(x-);
}
int main()
{
n=read(); m=read(); q=read(); u=read(); v=read(); k=read();
for(int i=;i<=n;i++) q1[i]=read();
sort(q1+,q1++n,cmp);
//for(int i=1;i<=n;i++) printf("[%d] ",q1[i]);
for(LL i=;i<=m;i++){
LL sum=push_max(i);
if(i%k==) printf("%lld ",sum);
LL now=sum*u/v;
//printf("[%lld %lld]\n",now,sum-now);
q2[++t2]=now-i*q; q3[++t3]=sum-now-i*q; }printf("\n");
for(LL i=;i<=n+m;i++){
LL sum=push_max(m+);
if(i%k==) printf("%lld ",sum);
}
return ;
}

当然优先队列也可以打部分分 但是因为m太大了 nlog(n+m) 会T 只能拿六十分 贴一波T的代码啦

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define LL long long
using namespace std;
const int M=1e7+;
LL read(){
LL ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
LL x;
struct node{
LL w;
bool operator < (const node &x)const {return w<x.w;}
};
priority_queue<node>qu;
int n,m,q,u,v,k;
int main()
{
n=read(); m=read(); q=read(); u=read(); v=read(); k=read();
for(int i=;i<=n;i++) x=read(),qu.push((node){x});
// while(!qu.empty()){node x=qu.top(); printf("%lld\n",x.w); qu.pop();}
for(int i=;i<=m;i++){
node x=qu.top(); qu.pop();
LL sum=x.w+(i-)*q,now=sum*u/v,cur=sum-now;
qu.push((node){now-i*q});
qu.push((node){cur-i*q});
if(i%k==) printf("%lld ",sum);
}printf("\n");
for(int i=;i<=n+m;i++){
node x=qu.top(); qu.pop();
LL sum=x.w+m*q;
if(i%k==) printf("%lld ",sum);
}
return ;
}

T6 愤怒的小鸟 题目传送门

这是一道状压dp g【i】【j】表示经过i,j两个点的二次函数一共能经过的点数

然后根据这个可以推出一波答案 不过要记得算一只鸟只打死一只猪的情况就好了

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int M=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int T,n,m;
int g[M][M],f[<<M],id[M];
double x[M],y[M],a,b;
bool pd(double x,double y){return fabs(x-y)<1e-;}
void push_ans(){
n=read(); m=read();
for(int i=;i<=n;i++) scanf("%lf %lf",&x[i],&y[i]);
memset(g,,sizeof(g));
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
if(pd(x[i],x[j])) continue;
a=(y[i]/x[i]-y[j]/x[j])/(x[i]-x[j]);
if(a>=) continue;
b=y[i]/x[i]-a*x[i];
int sum=;
for(int k=;k<=n;k++) if(pd(a*x[k]+b,y[k]/x[k])) sum+=id[k];
g[i][j]=sum;
}
}
memset(f,0x3f,sizeof(f));
f[]=;
for(int k=;k<(<<n);k++)
for(int i=;i<=n;i++){
if(id[i]&k) continue;
for(int j=i+;j<=n;j++) f[k|g[i][j]]=min(f[k|g[i][j]],f[k]+);
f[id[i]|k]=min(f[id[i]|k],f[k]+);
}
printf("%d\n",f[(<<n)-]);
}
int main()
{
for(int i=;i<M;i++) id[i]=<<(i-);
for(T=read();T;T--) push_ans();
return ;
}

noip2016 提高组的更多相关文章

  1. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

  2. 【题解】NOIP2016提高组 复赛

    [题解]NOIP2016提高组 复赛 传送门: 玩具谜题 \(\text{[P1563]}\) 天天爱跑步 \(\text{[P1600]}\) 换教室 \(\text{[P1850]}\) 组合数问 ...

  3. 【题解】NOIP2016 提高组 简要题解

    [题解]NOIP2016 提高组 简要题解 玩具迷题(送分) 用异或实现 //@winlere #include<iostream> #include<cstdio> #inc ...

  4. [日记&做题记录]-Noip2016提高组复赛 倒数十天

    写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...

  5. Noip2016提高组 组合数问题problem

    Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1< ...

  6. 【NOIP2016提高组】 Day2 T1 组合数问题

    题目传送门:https://www.luogu.org/problemnew/show/P2822                 ↓题目大意↓ 数据的极限范围:n,m≤2000,k≤21,数据组数≤ ...

  7. NOIP2016提高组初赛(C++语言)试题 个人的胡乱分析 Part 2.

    洛谷秋令营day1模拟赛原地爆炸,心态崩了.于是打算写一下初赛题放松一下. 上次胡乱分析到了选择题,这次我想说说后面的题. 问题求解 T1.有一个1x8的方格图形,黑白两色填涂每个方格,两个黑格并不能 ...

  8. Noip2016 提高组 蚯蚓

    刚看到这道题:这题直接用堆+模拟不就可以了(并没有认真算时间复杂度) 于是用priority_queue水到了85分-- (STL大法好) 天真的我还以为是常数问题,于是疯狂卡常--(我是ZZ) 直到 ...

  9. Noip2016 提高组 Day2 T1 组合数问题

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  10. BZOJ4719[NOIP2016提高组Day1T2] 天天爱跑步

    #261. [NOIP2016]天天爱跑步 描述 提交 自定义测试 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家 ...

随机推荐

  1. dubbo心跳机制 (1)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. dubbo的心跳机制: 目的:检测provider与consumer之间的connection连接是不是还连 ...

  2. javascript的优美与鸡肋

    --总结来自:<javascript语言精粹> 任何语言都有其优美的地方和其鸡肋的地方.避归一些语言的糟粕,能相应的降低bug出现的几率. 优美处: 函数是头等对象 基于原型继承的动态对象 ...

  3. jmeter插件之jsonpath提取响应结果和做断言

    准备工作: 1. jmeter3.X已经自带了提取响应结果的插件:JSON Extractor 2. 下载断言插件:https://jmeter-plugins.org/wiki/JSONPathAs ...

  4. React开发时候注意点

    JSX 使用jsx的使用,用一个{}包裹起来,例如 const method = {<div> 123 </div>} 使用()小括号,防止分号自动插入 const eleme ...

  5. C++学习003-#define 自定义宏

    C++中可以用#define来定义自定义的宏 也可以用使用#define来定义常量 但是#define只是简单的替换,在定义常量的时候没有语法检测 所以在C++定义常量可以使用  Const修饰 #d ...

  6. PL/SQL查看表结构

    SET LONG 99999;SET LINESIZE 140 PAGESIZE 1000;SELECT DBMS_METADATA.GET_DDL('&OBJECT_TYPE','& ...

  7. IDEA无法新建GUI Form文件

    因为最近想开发一个IDEA的插件,所以在开发的过程中就需要创建Swing GUI Form文件.但是在项目中右键New中始终就是没有“GUI Form”这个选项,然后自己琢磨寻思着是不是没有启用Swi ...

  8. iOS-显示日期的转换,今天,昨天,前天

    + (NSString *)stringWithDate:(NSDate *)date{ // 1.获得年月日 NSCalendar *calendar = [NSCalendar currentCa ...

  9. Win10系统开启IIS服务步骤

    原文链接:http://www.111cn.net/sys/361/93003.htm

  10. 【转】cocos2dx 3.x 集成protobuf

    http://www.cnblogs.com/chevin/p/6001872.html vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程 ...