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???我还是太菜了!! 对于每种颜色求出该颜色的四个边界,之后枚举边界构成的矩阵中每个元素,如果不等于该颜色就标记那种颜色不能最先使用. ...
随机推荐
- 解决域名DNS解析的故障
在实际应用过程中可能会遇到DNS解析错误的问题,就是说当我们访问一个域名时无法完成将其解析到IP地址的工作,而直接输入网站IP却可以正常访问,这就是因为DNS解析出现故障造成的.这个现象发生的机率比较 ...
- css遮罩代码(已验证)
#mask { background-color: rgb(0, 0, 0); display:none; opacity: 0.0; /* Safari, Opera */ -moz-opacity ...
- sqlserver附加 mdf、ldf的方法(手记)
exec sp_attach_db 'bookstore','E:\homework\bookstore_Data.MDF','E:\homework\bookstore_Log.LDF' EXEC ...
- [moka同学摘录]SQL内联、外联的简单理解
(源自:http://blog.csdn.net/kkk9127/article/details/1487686) --查询分析器中执行:--建表table1,table2:create table ...
- Java中的可变长参数
可变长参数的定义 与一般方法没多大差别,只不过形参多了...(三个点) 方法名(数据类型 ... 变量名){} 小案例: public class ParamDemo { public static ...
- Hibernate实现有两种配置,xml配置与注释配置
hibernate实现有两种配置,xml配置与注释配置. (1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) < ...
- Xdebug文档(五) 代码覆盖分析
代码覆盖分析能在请求时让你知道脚本哪一行(或哪一段)在执行. 相关设置 xdebug.coverage_enable 类型: boolean, 默认值: 1, 始于 Xdebug >= 2.2 ...
- 新建 .NET Core 项目 -- Hello World!
一.开发工具安装 1.可选模式一 (不推荐,此为Windows开发方式) 安装 Visual Studio 2015 / Visual Studio 2015 Update 3 / .NET Core ...
- 3D Banner(jQuery)
1.这是用面向对象的思想去动态生成banner的简易流程,用到一个javaScript框架jQuer: 2.将代码黏贴成html文件,直接用浏览器打开即可: 3.layer属于弹窗提示类插件,可能需要 ...
- HTML DOM 教程
HTML DOM DOM 教程 DOM 简介 DOM 节点 DOM 方法 DOM 属性 DOM 访问 DOM 修改 DOM 内容 DOM 元素 DOM 事件 DOM 导航 一,HTML DOM 简介 ...