1. 工资

(money/money.in/money.out)

时限1000ms 内存256MB

聪哥在暑假参加了打零工的活动,这个活动分为n个工作日,每个工作日的工资为Vi。有m个结算工钱的时间,聪哥可以自由安排这些时间,也就是说什么时候拿钱,老板说的不算,聪哥才有发言权!(因为聪哥是土豪,他是老板的老板)

聪哥不喜欢身上一次性有太多的钱,于是他想安排一下拿钱的时间,使他一次性拿的钱中最大的最小。(最后一天一定要领钱)

输入

第一行 2个数 n,m

接下来n行,每行一个数,代表Vi.

输出

最小的最大钱数。

样例输入

7 5

100

400

300

100

500

101

400

样例输出

500

样例说明

100 400//300 100//500//101//400//

“//”表示老大要去拿钱。

数据范围

20%   1<=n<=20

另 20%  1<=n<=50,Vi的和不超过1000

100%  1<=n<=100,000,m<=n,Vi<=10,000

第二题  藏妹子之处(excel

问题描述:

今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格。但要满足如下的两个条件:

(1)任意两个单元格都不在同一行。

(2)任意两个单元格都不在同一列。

选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x1-x2|+|y1-y2|)。狗狗想知道的是,花费在minT到maxT之间的方案数有多少。

答案模1000000007。所谓的两种不同方案是指:只要它选中的单元格有一个不同,就认为是不同的方案。

输入格式:

一行,4个整数,R、C、minT、maxT。3≤R,C≤4000, 1≤minT≤maxT≤20000。

对于30%的数据,  3 R, C 70。 

输出格式:

一个整数,表示不同的选择方案数量模1000000007后的结果。

输入输出样例:

输入样例

3 3 1 20000

3 3 4 7

4 6 9 12

7 5 13  18

4000 4000  4000  14000

输出样例

6

0

264

1212

859690013

Problem 3 银河之星(galaxy.cpp/c/pas)


T1:

二分贪心

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define MAXN 100005
#define ll long long
using namespace std;
int a[MAXN];
int n,m;
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if('-'==ch)f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int check(int w){
int cnt=,s=;
for(int i=;i<=n;i++){
if(s+a[i]>w){
cnt++;
if(cnt>m){
return ;
}
s=a[i];
}
else{
s+=a[i];
}
}
return ;
}
int main()
{
int L=,R=;
n=read();m=read();
for(int i=;i<=n;i++){
a[i]=read();
R+=a[i];
L=max(L,a[i]);
}
while(R-L>){
int mid=((ll)R+(ll)L)/;
if(check(mid)){
R=mid;
}
else{
L=mid+;
}
}
if(check(L)){
printf("%d\n",L);
}
else{
printf("%d\n",R);
}
return ;
}

Code1


T2:

数学分析,发现代价就是三个点组成的矩形的边长,枚举之后分两种情况:

1,两个点在矩形的对角线顶点,第三点到处逛~
左上-右下对角线 (x-1)*(y-1)
左下-右上对角线 (x-1)*(y-1)
2,一个点在矩形的一个顶点,其余两个点分别在其余的两条边
(x-1)(y-1)
然后矩形有4个顶点,所以是4*(x-1)(y-1)
可以证明,至少有一个点在矩形的顶点处
所以根据加法原理,有6*(x-1)(y-1)种情况,
然后矩形可以在局域里面到处跑,总共可以跑(n-x+1)*(m-y+1)处
乘起来即可

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define MOD 1000000007
#define ll long long
using namespace std;
ll n,m,s,t;
ll ans;
int main()
{
// freopen("data.in","r",stdin);
scanf("%lld%lld%lld%lld",&n,&m,&s,&t);
n--;m--;
if(s%==) s++;
if(t%==) t--;
if(t>(n+m)*){
t=(n+m)*;
}
for(ll i=s;i<=t;i+=){
ll d=i/;
for(ll j=max(1LL,d-m);j<=min(n,d-);j++){
ans=(ans+(*(j-)*(d-j-))%MOD*(n-j+)%MOD*(m-(d-j)+)%MOD)%MOD;
}
}
printf("%lld\n",ans);
return ;
}

Code2


T3:

一开始以点的位置为状态,用hash加搜索,结果好慢好慢啊,T了8个点

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<queue>
#define MAXN 105
#define MOD 1000003
#define P 17
#define pii pair<int,int>
using namespace std;
int gx[]={,,,,,-,-,-};
int gy[]={,-,,,-,,,-};
int k,n,m,x0,y0;
bool b[MOD];
struct Node{
int s;
pii p[];
};
queue<Node> q;
int hash(Node t){
int ret=;
for(int i=;i<k;i++){
if(t.s&(<<i)){
ret=(ret+t.p[i].first*MAXN+t.p[i].second)%MOD;
}
ret=ret*P%MOD;
}
return ret;
}
int Abs(int x){
return (x>)?x:-x;
}
int bfs(){
while(!q.empty()){
int s=q.front().s;
pii p[];
memcpy(p,q.front().p,sizeof(p));
q.pop();
int L=,cnt;
for(int i=;i<k;i++){
if(s&(<<i)){
L++;
cnt=i;
}
}
if(==L){
if(Abs(p[cnt].first-x0)%==&&Abs(p[cnt].second-y0)%==){
return ;
}
continue;
}
int a[MAXN][MAXN]={};
for(int i=;i<k;i++){
if(s&(<<i)){
a[p[i].first][p[i].second]=i+;
}
}
for(int i=;i<k;i++){
if(s&(<<i)){
for(int d=;d<;d++){
int dx=p[i].first,dy=p[i].second;
for(int j=;j<=;j++){
dx+=gx[d];
dy+=gy[d];
}
if(<=dx&&dx<=n&&<=dy&&dy<=m&&!a[dx][dy]){
Node t;
t.s=s;
memcpy(t.p,p,sizeof(t.p));
t.p[i]=make_pair(dx,dy);
int h=hash(t);
if(!b[h]){
b[h]=;
q.push(t);
}
}
}
}
}
for(int i=;i<k;i++){
if(s&(<<i)){
for(int d=;d<;d++){
int dx=p[i].first,dy=p[i].second;
dx+=gx[d];
dy+=gy[d];
if(a[dx][dy]){
int v=a[dx][dy]-;
dx+=gx[d];
dy+=gy[d];
if(<=dx&&dx<=n&&<=dy&&dy<=m&&!a[dx][dy]){
Node t;
t.s=s^(<<v);
memcpy(t.p,p,sizeof(t.p));
t.p[i]=make_pair(dx,dy);
int h=hash(t);
if(!b[h]){
b[h]=;
q.push(t);
}
}
}
}
}
}
}
return ;
}
void solve(){
memset(b,,sizeof(b));
while(!q.empty()) q.pop();
Node t;
t.s=(<<k)-;
for(int i=;i<k;i++){
scanf("%d%d",&t.p[i].first,&t.p[i].second);
}
b[hash(t)]=;
q.push(t);
if(bfs()){
printf("Yes\n");
}
else{
printf("No\n");
}
}
int main()
{
// freopen("data.in","r",stdin);
while(~scanf("%d%d%d%d%d",&k,&n,&m,&x0,&y0)){
solve();
}
return ;
}

Code3-1

后来发现,应当抓住问题的性质,即能否到达,而不是最短距离之类
由于坐标相差3的倍数的点可以互相移动到达,不妨认为就是一个点了,然后只会存在9种点
0 1 2 0 1 2
3 4 5 3 4 5
6 7 8 6 7 8
0 1 2 0 1 2
3 4 5 3 4 5
6 7 8 6 7 8
这样移动三步的情况就解决了
然后移动两步比如0+4=8 3+4=5
注意需要考虑这种情况
1 X X
X X X
X X 1
一般来说0+8=4
但是这种情况下地图只有这么小,你的0跑到8底下就超出范围了
所以不能直接计算,需要枚举处理合法的情况
然后问题迎刃而解了

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<map>
#define MAXN 102
#define P 11
#define ll long long
using namespace std;
map<ll,bool> mp;
int gx[]={,,-,-,-,,,};
int gy[]={-,,-,,,-,,};
int K,n,m,ed;
int G[][];
ll hash(int a[]){
ll ret=;
for(int i=;i<;i++){
ret=ret*P+a[i];
}
return ret;
}
int place(int x,int y){
return ((x-)%)*+(y-)%;
}
void init(){
memset(G,-,sizeof(G));
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
for(int k=;k<;k++){
int x1=i+gx[k],y1=j+gy[k];
int x2=x1+gx[k],y2=y1+gy[k];
if(<=x2&&x2<=n&&<=y2&&y2<=m){
int t1=place(i,j);
int t2=place(x1,y1);
int t3=place(x2,y2);
G[place(i,j)][place(x1,y1)]=place(x2,y2);
}
}
}
}
}
int dfs(ll x){
if(x==ed){
return ;
}
int b[]={};
for(int i=;i>=;i--){
b[i]=x%;
x/=;
}
for(int i=;i<;i++){
for(int j=;j<;j++){
if(b[i]&&b[j]&&G[i][j]!=-){
int d[]={};
memcpy(d,b,sizeof(d));
d[i]--;
d[j]--;
d[G[i][j]]++;
ll h=hash(d);
if(!mp[h]){
mp[h]=;
if(dfs(h))
return ;
}
}
}
}
return ;
}
int main()
{
// freopen("data.in","r",stdin);
int x,y;
while(~scanf("%d%d%d%d%d",&K,&n,&m,&x,&y)){
mp.clear();
init();
int b[]={};
b[place(x,y)]++;
ed=hash(b);
b[place(x,y)]--;
for(int i=;i<=K;i++){
scanf("%d%d",&x,&y);
b[place(x,y)]++;
}
ll h=hash(b);
mp[h]=;
if(dfs(h)){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return ;
}

Code3-2

这是一道搜索的好题,提醒我们铭记问题的性质决定求解的方法

NOIP2014-9-6模拟赛的更多相关文章

  1. 2014-9-13 NOIP模拟赛

    NOIP2014模拟赛 ——lwher 题目名 环上的游戏 舞蹈课 数位和乘积 源文件 cycle.cpp/c/pas dancingLessons.pas/cpp digit.cpp.cpp/c/p ...

  2. 2014-10-23 NOIP模拟赛

    NOIP2014模拟赛 -----lwher 时限均为1s,内存 256MB 1.Jams倒酒(pour) Jams是一家酒吧的老板,他的酒吧提供2种体积的啤酒,a ml 和 b ml,分别使用容积为 ...

  3. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  4. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  5. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  6. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  7. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  8. 小奇模拟赛9.13 by hzwer

    2015年9月13日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...

  9. PKUSC 模拟赛 day1 下午总结

    下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...

  10. [GRYZ]寒假模拟赛

    写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...

随机推荐

  1. 【nodejs】安装browser-sync 遇到错误提示

    首先我用的是mac电脑在我执行安装browser-sync时遇到如下问题: 因为不被允许所以我只能不安装全局了: 但是又出现了如下的新问题 纠结了半个小时,终于知道为什么会出现这个问题了, node只 ...

  2. zookeeper安装及环境变量设置

    下载 首先去官网下载(自行选择版本):http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11/然后执行tar -zxvf解压 对于后台安装 ...

  3. SiteMesh在项目中的配置

    SiteMesh在项目中的配置 首先在web.xml里面增加siteMesh的配置: <filter> <filter-name>sitemesh</filter-nam ...

  4. 新概念英语(1-67)The weekend

    新概念英语(1-67)The weekend What are the Johnsons going to do at the weekend? A:Hello. Were you at the bu ...

  5. python入门(5)使用文件编辑器编写代码并保存执行

    python入门(5)使用文件编辑器编写代码并保存执行 两款文本编辑器: 一个是Sublime Text,免费使用,但是不付费会弹出提示框: 一个是Notepad++,免费使用,有中文界面: 请注意, ...

  6. java中数组、list、泛型集合的长度

    1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性. 2 java中的length()方法是针对字符串String说的,如果想看这 ...

  7. JavaScript简单重写构造器的原型

    //简单重写原型对象: //一个构造函数Person function Person(){ } //重写Person的原型 //把Person的原型赋值给一个新的对象 是我们重写的过程 Person. ...

  8. 两款不同应用场景的Wpf分页控件

    简介 今天给大家分享两个Wpf分页控件,本篇博客主要介绍一些实现思路和使用方法,具体实现和应用代码请参考文末的Demo链接 废话不多说,先看一下效果~ (两款控件显示效果是一样的) 实现思路 一款控件 ...

  9. windows下postgresql安装失败解决方法:无法运行getlocales.exe

    今天要安装postgresql但是安装的时候出现错误 Unknown error while running C:\Users\jinjin\AppData\Local\Temp\postgresql ...

  10. requests-文件上传

    import requests files = {'file':open('D://tomas.jpg','rb')}#设定一个files,打开文件对象 response = requests.pos ...