Day1 T1

签到题,模拟一下随便写就能过。

不过小心像我一样表打错傻逼的调了10min。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int La=,Lb=,N=;
int xl_a[]={},xl_b[]={};
int check[][]={{,-,,,-},{,,-,,-},{-,,,-,},{-,-,,,},{,,-,-,}};
int main(void)
{
freopen("rps.in","r",stdin);
freopen("rps.out","w",stdout);
scanf("%d%d%d",&N,&La,&Lb);
for(int i=;i<=La;i++)scanf("%d",&xl_a[i]);
for(int i=;i<=Lb;i++)scanf("%d",&xl_b[i]);
int a=,b=,ans_a=,ans_b=;
for(int i=;i<=N;i++)
{
a=xl_a[i%La];
if(!(i%La))a=xl_a[La];
b=xl_b[i%Lb];
if(!(i%Lb))b=xl_b[Lb];
if(check[a][b]==){ans_a++;continue;}
if(check[a][b]!=){ans_b++;;continue;}
}
printf("%d %d",ans_a,ans_b);
return ;
}

T2

没什么难度……不知道为什么能卡当时的我只拿70分。

大概是不知道n个点n-1条边就是树?

最开始写代码的时候没考虑兄弟节点的情况……后面紧急补上去了,还好发现了不然岂不是又得炸。

一涉及到取模我的代码风格就变得乱七八糟。

简述一下,我们对这棵树从1开始dfs,每到一个节点,就先更新答案(和它父亲的父亲)。

然后枚举它的儿子节点,记录两个参数,max_son和tot,max_son是它儿子节点中权值最大的那个,tot是它所有儿子的权值和。

max_son是更新第一个最大值的答案的,tot是更新第二个答案的。

顺便提醒一下,因为题面上说的是有序点对,所以说我们每次更新第二个答案的时候都要记住乘个2……【血泪教训】

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
struct lb
{
int nw;
int nxt;
};
lb line[];
int n=,cnt=,val[]={},head[]={};
int fa[]={},ans1=,ans2=;
void add(int f,int t);
void dfs(int nw);
int main(void)
{
freopen("link.in","r",stdin);
freopen("link.out","w",stdout);
scanf("%d",&n);
int a=,b=;
for(int i=;i<=n-;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
for(int i=;i<=n;i++)scanf("%d",&val[i]);
fa[]=;
dfs();
printf("%d %d",ans1,ans2);
return ;
} void add(int f,int t)
{
line[++cnt].nw=t;
line[cnt].nxt=head[f];
head[f]=cnt;
return;
} void dfs(int nw)
{
if(nw>n)return;
if(fa[fa[nw]])
{
ans1=max(ans1,val[nw]*val[fa[fa[nw]]]);
ans2+=val[nw]*val[fa[fa[nw]]]*;
ans2%=;
}
int next=,max_son=,tot=;
for(int i=head[nw];i>;i=line[i].nxt)
{
next=line[i].nw;
if(next==fa[nw])continue;
ans1=max(ans1,val[next]*max_son);
ans2+=(tot%)*val[next]*;
ans2%=;
max_son=max(max_son,val[next]);
tot+=val[next];
tot%=;
fa[next]=nw;
dfs(next);
}
return;
}

T3

我和昨年一样没有长进【不还是多得了五分的】

剩下的都是TLE。

代码风格无论怎么说还是变了一些的。

这题就是个背包,完全=A=,但是我写得丑写不过……

昨年代码↓

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
ifstream fin("bird.in");
ofstream fout("bird.out");
bool jz[][]={};//0表示可通行,1表示有管道
int ss[][]={};//0表示点击后上升,1表示向下坠落
int DP[][]={};//DP[i][j]表示在x坐标为i,y坐标为j下最小点击数
bool gd[]={};//记录每一x坐标是否有管道
int Lx=,Ly=,Gds=;
int main(void)
{
fin>>Lx>>Ly>>Gds;
for(int i=;i<Lx;i++)fin>>ss[][i]>>ss[][i];
int Gx=,Up=,Down=;
for(int i=;i<=Gds;i++)
{
fin>>Gx>>Down>>Up;
for(int j=;j<=Down;j++)jz[Gx][j]=true;
for(int j=Ly;j>=Up;j--)jz[Gx][j]=true;
gd[Gx]=true;
}
memset(DP,/,sizeof(DP));
for(int i=;i<=Ly;i++)DP[][i]=;
int ans=0x7fffffff,tgs=,nxt=;
bool pd=false;
for(int i=;i<=Lx;i++)
{
ans=0x7fffffff;
pd=false;
for(int j=;j<=Ly;j++)
{
if(DP[i][j]==)continue;
if(jz[i][j])continue;
pd=true;
if(!jz[i+][j-ss[][i]]&&j-ss[][i]>)//如果不点击下一回合也不会死亡
{
DP[i+][j-ss[][i]]=min(DP[i+][j-ss[][i]],DP[i][j]);
if(DP[i+][j-ss[][i]]<ans)ans=DP[i+][j-ss[][i]];
}
for(int k=;k<=Ly;k++)
{
nxt=k*ss[][i];//点击k次后下一次上升的位置
if(nxt+j>Ly)nxt=Ly-j;
if(jz[i+][j+nxt])continue;
DP[i+][j+nxt]=min(DP[i+][j+nxt],DP[i][j]+k);
if(DP[i+][j+nxt]<ans)ans=DP[i+][j+nxt];
if(nxt==Ly-j)break;
}
}
if(!pd)break;
if(gd[i])tgs++;
}
if(tgs==Gds)fout<<"1\n"<<ans;
else fout<<"0\n"<<tgs;
return ;
}

今年的↓

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int n=,m=,k=,bef[]={};
int up[]={},down[]={},dp[][]={};
bool check[][]={};
const int INF=;
int main(void)
{
freopen("bird.in","r",stdin);
freopen("bird.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++)scanf("%d%d",&up[i],&down[i]);
int a=,b=,c=;
for(int i=;i<=k;i++)
{
scanf("%d%d%d",&a,&b,&c);
for(int j=;j<=b;j++)check[a+][j]=;
for(int j=c;j<=m;j++)check[a+][j]=;
bef[a+]++;
}
for(int i=;i<=n;i++)bef[i]+=bef[i-];
memset(dp,0x7f,sizeof(dp));
for(int i=;i<=m;i++)dp[][i]=;
int u=,d=,mark=,ans=INF,loop=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(dp[i&][j]!=INF&&!check[i][j])
{
mark=i;
loop=max((m-j)/up[i]+,);
for(int k=;k<=loop;k++)
{
u=min(m,j+up[i]*k);
if(!check[i+][u])dp[(i+)&][u]=min(dp[(i+)&][u],dp[i&][j]+k);
if(i==n)ans=min(ans,dp[(i+)&][u]);
}
d=max(,j-down[i]);
if(d==)continue;
if(!check[i+][d])dp[(i+)&][d]=min(dp[(i+)&][d],dp[i&][j]);
if(i==n)ans=min(ans,dp[(i+)&][d]);
}
}
for(int j=;j<=m;j++)dp[i&][j]=INF;
}
if(mark<n)
{
printf("0\n%d",bef[mark]);
return ;
}
printf("1\n%d",ans);
return ;
}

【NOIP2014】Day1题解+代码的更多相关文章

  1. 【NOIP2013】DAY1题解+代码

    T1 傻逼快速幂,敲敲就过了. 我跟你们讲个笑话当时我以为这个数据范围过不了于是想出了求GCD再推规律什么的magic方法中途还咨询了某个学长. 然后怎么想都是不可做. ……直到我发现我昨年的代码一个 ...

  2. 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication【最小割】分析+题解代码

    洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication[最小割]分析+题解代码 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流. ...

  3. 洛谷 P2762 太空飞行计划问题 P3410 拍照【最大权闭合子图】题解+代码

    洛谷 P2762 太空飞行计划问题 P3410 拍照[最大权闭合子图]题解+代码 最大权闭合子图 定义: 如果对于一个点集合,其中任何一个点都不能到达此集合以外的点,这就叫做闭合子图.每个点都有一个权 ...

  4. 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码

    洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...

  5. 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码

    洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...

  6. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  7. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  8. 洛谷P1854 花店橱窗布置 分析+题解代码

    洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...

  9. THUSC2017 Day1题解

    THUSC2017 Day1题解 巧克力 题目描述 "人生就像一盒巧克力,你永远不知道吃到的下一块是什么味道." 明明收到了一大块巧克力,里面有若干小块,排成n行m列.每一小块都有 ...

随机推荐

  1. 值为NULL的对象指针

    相信大家对NULL不会很陌生,NULL 是一个标准规定的宏定义,用来表示空指针常量,当一个指针变量被赋值为NULL时,表示它不再指向任何有效地址,无法在访问任何数据.在VS2012库文件stdio.h ...

  2. 在 InstantRails 环境下,安装使用 redMine

    在 InstantRails 环境下,安装使用 redMine 分类: Redmine2009-06-01 10:35 732人阅读 评论(0) 收藏 举报 characterrailsencodin ...

  3. .NET MVC4 实训记录之四(Unit of work + Repository)

    今日后开启进阶模式! 谈到MVC与EntityFramework,则不得不说一说事务与仓储(Unit of work + Repository). 仓储(Repository):领域对象集合.用于操作 ...

  4. asp.net mvc4

    select省市联动选择城市 asp.net mvc4 2014-05-24 16:48 by P.C ++, 159 阅读, 2 评论, 收藏, 编辑 本文在 http://www.cnblogs. ...

  5. ThoughtWorks开发持续集成及部署利器:Go

    持续集成及部署利器:Go   Go是一款先进的持续集成和发布管理系统,由ThoughtWorks开发.(不要和Google的编程语言Go混淆了!)其前身为Cruise,是ThoughtWorks在做咨 ...

  6. oracle数据库管理--对象、角色相关查询

    1.数据字典:     记录了数据库的系统信息,它是只读表和视图的集合,数据字典的所有用户者为sys用户.用户只能在数据字典上执行查询操作(select语句),而其维护与修改是由系统自动完成的.数据字 ...

  7. 解决Timer回调方法重复调用的问题

    如果Timer的回调方法的执行时间很长,计时器可能在上个回调方法还没有完成的时候再次触发,如果我们只是想让一个回调方法执行完后再执行下一个回调方法,可以这样: private static Timer ...

  8. socket网络编程快速上手(二)——细节问题(1)

    三.细节问题一个也不能少 Socket编程说简单也简单,程序很容易就能跑起来,说麻烦还真是麻烦,程序动不动就出问题.记得刚开始写网络代码的时候,那真是令人抓狂的经历,问题一个套一个,一会服务器起不来了 ...

  9. 记一次bug查找经历

    系统采用cell插件显示汇总数据,然后发现个公司数据显示不出来,接到这个任务开始查找bug. 通过需求了解并不知道其他公司什么情况,因为就这个公司有了反馈: 本来以为很容易找到点的,毕竟数据显示不出来 ...

  10. Asp.Net MVC 进阶篇:路由匹配 实现博客路径 和文章路径

    Asp.Net MVC 进阶篇:路由匹配 实现博客路径 和文章路径 我们要实现 通过路由 匹配出 博客地址 和博客文章地址 例如下面的这两个地址 //http://www.cnblogs.com/ma ...