2016.10.29 清北学堂NOIP冲刺班Day1 AM 考试总结
成绩:满分300,我得了200,
1:90//前两个题目都是模拟,没用到什么其他算法,第一题有可能少考虑了一点细节
2:100
3:10//感觉是个DP,但是毫无思路,只打了个普通背包,10分而已。
题目+数据:http://pan.baidu.com/s/1bpj3SR1
下面是我的代码:
这个题目中我为了得到部分分,而特别判断了几组数据。
T1:
/*
以后一定要仔细读数据范围,一定要。
数据范围中:20%的数据,只有秒数可能不同,言外之意就是可能相同。
而我的程序因为没有考虑到,时间相同时直接输出0000,。O__O"… 一个小技巧:计算时间时,可以把所有的时间都换算成秒,直接总秒数1-秒数2,不仅不会溢出,而且也方便计算。
*/
#include<iostream>
using namespace std;
#include<cstdio>
typedef long long ll;
struct Tim{
int n,y,r,x,f,m;
}tim1,tim2;
long long ans=;
int mon[]={,,,,,,,,,,,,};
bool is_runnian(int x)
{
if(x%==) return true;
if(x%!=&&x%==) return true;
return false;
} void input()
{
scanf("%d-%d-%d %d:%d:%d",&tim1.n,&tim1.y,&tim1.r,&tim1.x,&tim1.f,&tim1.m);
scanf("%d-%d-%d %d:%d:%d",&tim2.n,&tim2.y,&tim2.r,&tim2.x,&tim2.f,&tim2.m);
}
int main()
{
// freopen("two.in","r",stdin);
// freopen("two.out","w",stdout);
input();
if(tim1.n==tim2.n&&tim1.y==tim2.y&&tim1.r==tim2.r)
{
ans=(ll)(tim2.x*+tim2.f*+tim2.m)-(tim1.x*+tim1.f*+tim1.m);
}
else if(tim1.n==tim2.n)
{
ll d1=,d2=;
for(int i=;i<tim1.y;++i)
d1+=mon[i];
if(is_runnian(tim1.n)&&tim1.y>) d1++;
for(int i=;i<tim2.y;++i)
d2+=mon[i];
if(is_runnian(tim2.n)&&tim2.y>) d2++;
d1+=tim1.r;
d2+=tim2.r;
ans=(ll)(d2**+tim2.x*+tim2.f*+tim2.m)-(ll)(d1**+tim1.x*+tim1.f*+tim1.m); }
else{
ll d1=,d2=;
for(int i=;i<tim1.n;++i)
if(is_runnian(i)) d1+=;
else d1+=;
for(int i=;i<tim2.n;++i)
if(is_runnian(i)) d2+=;
else d2+=;
for(int i=;i<tim1.y;++i)
d1+=mon[i];
if(is_runnian(tim1.n)&&tim1.y>) d1++;
for(int i=;i<tim2.y;++i)
d2+=mon[i];
if(is_runnian(tim2.n)&&tim2.y>) d2++;
d1+=tim1.r;
d2+=tim2.r;
ans=(ll)(d2**+tim2.x*+tim2.f*+tim2.m)-(ll)(d1**+tim1.x*+tim1.f*+tim1.m);
}
if(ans) cout<<ans<<"";
else printf("0\n");
fclose(stdin);
fclose(stdout);
return ;
}
T2:
#include<iostream>
using namespace std;
#include<cstdio>
#define N 100010
#define M 50010
#include<algorithm>
#include<queue>
typedef long long ll;
struct node{
ll tim;
bool operator <(node P)
const{return tim>P.tim;}
};
priority_queue<node>Q;
ll ren[N];
int n,m;
ll read()
{
ll ret=;
char s=getchar();
while(s<''||s>'')
{
s=getchar();
}
while(s>=''&&s<='')
{
ret=ret*+s-'';
s=getchar();
}
return ret;
}
void input()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
ren[i]=read();
for(int i=;i<=m;++i)
{
node X;
X.tim=ren[i];
Q.push(X);
}
}
int main()
{
freopen("death.in","r",stdin);
freopen("death.out","w",stdout);
input();
for(int i=m+;i<=n;++i)
{
node Now=Q.top();
Q.pop();
Now.tim+=ren[i];
Q.push(Now);
}
printf("%I64d",Q.top());
fclose(stdin);
fclose(stdout);
return ;
}
T3:
解析:
看了看题解:感觉也是这个道理:也许它并不需要Dp,比如在1*(*)中,我们为了价值最大,肯定先放价值大的(因为体积相同嘛),所以我们就把
价值大的先放进去就可以了。
这个题目注意两点即可: .有很多体积相同但是价值不同的物品,可以直接用贪心排序,就可以了。 .不必关注具体的背包中的物品如何放置,只需要关注能放多少个就可以了。因为我们总有办法使放到几乎满了或者满了的情况。 所以思路:
可以直接用n*m/,n*m/,计算数目,但是我们要想一想这样有没有可能出现错误。
n*m/2情况,如果n*m的背包1*2这么放,那么最后只可能
余下一个空位置,那么结果是不错的,但是如果是n*m的情况,我们可以发现,如果满足
n%== && m%== && (n== || m==),如果只放1*,最后会余下一个2*2的正方形不能再放,但是如果直接用n*m/3的话,结果就会多1了。
#include<iostream>
using namespace std;
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 10010
int t,n,m,n1,n2,wu1[N],wu2[N];
int sumwu1[N],sumwu2[N];
typedef long long ll;
bool cmp1(int a,int b)
{
return a>b;
}
int main()
{
// freopen("eyesight.in","r",stdin);
// freopen("eyesight.out","w",stdout);
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&n,&m,&n1,&n2);
memset(sumwu1,,sizeof(sumwu1));
memset(sumwu2,,sizeof(sumwu2));
for(int i=;i<=n1;++i)
scanf("%d",&wu1[i]);
for(int i=;i<=n2;++i)
scanf("%d",&wu2[i]);
sort(wu1+,wu1+n1+,cmp1);
sort(wu2+,wu2+n2+,cmp1);
for(int i=;i<=n1;++i)
sumwu1[i]=sumwu1[i-]+wu1[i];
for(int i=;i<=n2;++i)
sumwu2[i]=sumwu2[i-]+wu2[i];
ll ans=;
int dalta;
if(n%==&&m%==&&(n==||m==)) dalta=;
else dalta=n*m%;
int sum=min(n2,(n*m-dalta)/);
for(int i=;i<=sum;++i)
ans=max(ans,(ll)(sumwu2[i]+sumwu1[min(n1,(n*m-*i)>>)]));
cout<<ans<<endl; }
fclose(stdin);
fclose(stdout);
return ;
}
2016.10.29 清北学堂NOIP冲刺班Day1 AM 考试总结的更多相关文章
- 10.24afternoon清北学堂刷题班
/* 这是什么题... */ #include<iostream> #include<cstdio> #include<cstring> #include<q ...
- 洛谷P1080 [NOIP2012提高组D1T2]国王游戏 [2017年5月计划 清北学堂51精英班Day1]
P1080 国王游戏 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 ...
- 洛谷P1650 赛马[2017年5月计划 清北学堂51精英班Day1]
P1650 赛马 题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者可以从负者这 ...
- 洛谷P2258 子矩阵[2017年5月计划 清北学堂51精英班Day1]
题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第2.4行和第2.4.5列交叉位置的元素 ...
- 洛谷P2327 [SCOI2005]扫雷 [2017年5月计划 清北学堂51精英班Day1]
P2327 [SCOI2005]扫雷 题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一 ...
- 2016.10.29初中部上午NOIP普及组比赛总结
2016.10.29[初中部 NOIP普及组 ]模拟赛 做得好爽! 进度: 比赛:35+45+AC+0=180 改题:AC+AC+AC+0=300 幸运的数 有点无语--之前怕超限,还特意利用程序打了 ...
- 10月清北学堂培训 Day 7
今天是黄致焕老师的讲授~ 历年真题选讲 NOIP 2012 开车旅行 小 A 和小 B 决定外出旅行,他们将想去的城市从 1 到 n 编号,且编号较小的城市在编号较大的城市的西边.记城市 i 的海拔高 ...
- 10月清北学堂培训 Day 5
今天是廖俊豪老师的讲授~ T1 第一次想出正解 30 pts: k <= 10,枚举如何把数放到矩阵中,O ( k ! ): 100 pts: 对于矩阵的每一列,我们二分最小差异值,然后贪心去判 ...
- 10月清北学堂培训 Day 6
今天是黄致焕老师的讲授~ T1 自信 AC 莫名 80 pts???我还是太菜了!! 对于每种颜色求出该颜色的四个边界,之后枚举边界构成的矩阵中每个元素,如果不等于该颜色就标记那种颜色不能最先使用. ...
随机推荐
- 模仿36。杀毒~button
<Style x:Key="360btn" TargetType="{x:Type Button}"> <Setter Property=&q ...
- css3元素简单的闪烁效果(html5 jquery)
css3 Animation: @-webkit-keyframes twinkling{ /*透明度由0到1*/ 0%{ opacity:0; /*透明度为0*/ } 100%{ opacity:1 ...
- PetaPoco4.0的事务为什么不会回滚
using (var srop=DbHelper.CurrentDb.GetTransaction()) { ID = bp.AddModel(model).ToStr(); #region 参与楼盘 ...
- JFreechart在linux下不显示及中文乱码问题
一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉, 原因是jfreechart的在linux系统中需要访问java awt库 ...
- 浅谈Slick(1)- 基本功能描述
Slick (Scala language-integrated connection kit)是scala的一个FRM(Functional Relational Mapper),即函数式的关系数据 ...
- javascript中concat方法深入理解
最近在恶补js知识的时候,总是会因为js强大的语法而感到震撼.因为以前对前端方面的疏忽,导致了一些理解的错误.因此痛改前非,下定决心,不管做什么事情,都要有专研的精神. 在介绍前,抛出一个问题:如何将 ...
- JavaScript基本语法(三)
上篇博文说到JS的运算符,这次说说JS程序流程控制. 1. 条件语句 if 语法: if(condition) statements1 else statement2 当括号里的条件成立的时候,执行i ...
- UITableView或UIScrollVIew上的UIButton的高亮效果
UITableView或UIScrollVIew上的UIButton的高亮效果 原文地址:http://www.jianshu.com/p/b4331f06bd34 最近做项目的时候发现,UIScro ...
- Android measure过程分析
作为一名Android开发人员,我们都知道一个View从无到有,会经历3个阶段: 1. measure/测量阶段,也就是确定某个view大小的过程: 2. layout/布局阶段,也就是确定其左上右下 ...
- android 图片性能优化
本章讲述在android开发中,图片处理方面的优化.包括知识点为大图加载,图片压缩,图片缓存处理及开源图片处理框架Universal-Image-Loader. 1.图片引发的内存不足 当在andro ...