Problem 1 护花(flower.cpp/c/pas)

【题目描述】

约翰留下他的N(N<=100000)只奶牛上山采木.他离开的时候,她们像往常一样悠闲地在草场里吃草.可是,当他回来的时候,他看到了一幕惨剧:牛们正躲在他的花园里,啃食着他心爱的美丽花朵!为了使接下来花朵的损失最小,约翰赶紧采取行动,把牛们送回牛棚. 牛们从1到N编号.第i只牛所在的位置距离牛棚Ti(1≤Ti≤2000000)分钟的路程,而在约翰开始送她回牛棚之前,她每分钟会啃食Di(1≤Di≤100)朵鲜花.无论多么努力,约翰一次只能送一只牛回棚.而运送第第i只牛事实上需要2Ti分钟,因为来回都需要时间.    写一个程序来决定约翰运送奶牛的顺序,使最终被吞食的花朵数量最小.

【输入格式】

第1行输入N,之后N行每行输入两个整数Ti和Di

【输出格式】

一个整数,表示最小数量的花朵被吞食

【样例输入】

6

3 1

2 5

2 3

3 2

4 1

1 6

【样例输出】

86

【样例解释】

约翰用6,2,3,4,1,5的顺序来运送他的奶牛

按D/T排序,证明相邻的交换过来不会比原来更优即可。

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
inline void read(long long &x)
{
x = ;char ch = getchar();char c = ch;
while(ch > '' || ch < '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '',ch = getchar();
if(c == '-')x = -x;
}
const long long MAXN = + ;
const int INF = 0x3f3f3f3f; long long n,T[MAXN],D[MAXN],cnt[MAXN]; bool cmp(long long a, long long b)
{
return D[a] * T[b] > D[b] * T[a];
} long long ans;
long long sum; int main()
{
read(n);
for(register long long i = ;i <= n;++ i)
{
read(T[i]);read(D[i]);
cnt[i] = i;
sum += D[i];
}
std::sort(cnt + , cnt + + n, cmp);
for(register long long i = ;i <= n;++ i)
{
sum -= D[cnt[i]];
ans += ((long long)(sum * T[cnt[i]]) << );
}
printf("%lld", ans);
return ;
}

Problem 2 修剪草坪(mowlawn.cpp/c/pas)

【题目描述】

在一年前赢得了小镇的最佳草坪比赛后,FJ变得很懒,再也没有修剪过草坪。现在,
新一轮的最佳草坪比赛又开始了,FJ希望能够再次夺冠。
然而,FJ的草坪非常脏乱,因此,FJ只能够让他的奶牛来完成这项工作。FJ有N(1 <= N <= 100,000)只排成一排的奶牛,编号为1...N。每只奶牛的效率是不同的,奶牛i的效率为E_i(0 <= E_i <= 1,000,000,000)。靠近的奶牛们很熟悉,因此,如果FJ安排超过K(1<=K<=N)只连续的奶牛,那么,这些奶牛就会罢工去开派对:)。因此,现在FJ需要你的帮助,计算FJ可以得到的最大效率,并且该方案中没有连续的超过K只奶牛。

【输入格式】
* 第一行:空格隔开的两个整数N和K
* 第二到N+1行:第i+1行有一个整数E_i

【输出格式】
* 第一行:一个值,表示FJ可以得到的最大的效率值。

【样例输入】

5 2

1

2

3

4

5

输入解释:

FJ有5只奶牛,他们的效率为1,2,3,4,5。他们希望选取效率总和最大的奶牛,但是

他不能选取超过2只连续的奶牛

【样例输出】

12

FJ可以选择出了第三只以外的其他奶牛,总的效率为1+2+4+5=12。

神奇的dp。

f[i]表示1..i只奶牛不选第i只的最小损耗

初始状态f[0] = 0

转移f[i] = min{f[j]} + e[i],其中(i - j - 1 <= k)

维护一个单调递增队列,从队首取最小元素,新元素加到队尾并维持单调性,每次取队首元素时检查是否合法(即i - j - 1 <= k)

此题开longlong,注意INF的取值,所以以后尽量手写一层,不要用INF

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
inline void read(long long &x)
{
x = ;char ch = getchar();char c = ch;
while(ch > '' || ch < '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '',ch = getchar();
if(c == '-')x = -x;
}
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int MAXN = + ;
inline long long max(long a, long b){return a > b ? a : b;}
inline long long min(long a, long b){return a < b ? a : b;} long long n,k,e[MAXN];
long long ans; long long q1[MAXN << ], q2[MAXN << ],head, tail;
long long f[MAXN]; int main()
{
read(n);read(k);
for(register long long i = ;i <= n;++ i)
read(e[i]),ans += e[i]; head = tail = ;//队列表示的范围:[head,tail]
q1[] = q2[] = ;
for(register int i = ;i <= n;++ i)
{
while(i - q2[head] - > k)head ++;
f[i] = e[i] + q1[head];
while(q1[tail] >= f[i] && head <= tail)tail--;
q1[++ tail] = f[i];
q2[tail] = i;
}
long long tmp = INF;
//最好改为tmp = f[n - k];
for(register int i = n - k;i <= n;++ i)
{
tmp = min(tmp, f[i]);
}
printf("%lld", ans - tmp);
return ;
}

Problem 3 虫洞(wormhole.cpp/c/pas)

【题目描述】

John在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前)。John的每个农场有M条小路(无向边)连接着N (从1..N标号)块地,并有W个虫洞(有向边)。其中1<=N<=500,1<=M<=2500,1<=W<=200。 现在John想借助这些虫洞来回到过去(出发时刻之前),请你告诉他能办到吗。 John将向你提供F(1<=F<=5)个农场的地图。没有小路会耗费你超过10000秒的时间,当然也没有虫洞回帮你回到超过10000秒以前。

【输入格式】

* Line 1: 一个整数 F, 表示农场个数。

* Line 1 of each farm: 三个整数 N, M, W。

* Lines 2..M+1 of each farm: 三个数(S, E, T)。表示在标号为S的地与标号为E的地中间有一条用时T秒的小路。

* Lines M+2..M+W+1 of each farm: 三个数(S, E, T)。表示在标号为S的地与标号为E的地中间有一条可以使John到达T秒前的虫洞。

【输出格式】

* Lines 1..F: 如果John能在这个农场实现他的目标,输出"YES",否则输出"NO"。

【样例输入】

2

3 3 1

1 2 2

1 3 4

2 3 1

3 1 3

3 2 1

1 2 3

2 3 4

3 1 8

【样例输出】

NO

YES

此虫洞非彼虫洞,明显简单一大截。

SPFA找负环即可,题意描述不够明确。

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
inline void read(int &x)
{
x = ;char ch = getchar();char c = ch;
while(ch > '' || ch < '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '',ch = getchar();
if(c == '-')x = -x;
}
inline int max(int a, int b){return a > b ? a : b;}
inline int min(int a, int b){return a < b ? a : b;}
inline void swap(int &a, int &b){int tmp = a;a = b;b = tmp;} const int INF = 0x3f3f3f3f;
const int MAXN = + ;
const int MAXE = + ;
const int MAXW = + ; int t;
int n,m,w; struct Edge
{
int u,v,w,next;
}edge[(MAXE << ) + MAXW];
int head[MAXN],cnt; inline void insert(int a, int b, int c)
{
edge[++cnt] = Edge{a,b,c,head[a]};
head[a] = cnt;
} std::queue<int> q;
int b[MAXN], d[MAXN], cot[MAXN]; inline int SPFA(int s)
{
memset(b, , sizeof(b));
memset(d, 0x3f, sizeof(d));
memset(cot, , sizeof(cot));
q.push(s);
d[s] = ;
b[s] = true;
cot[s] ++;
register int u,v;
while(!q.empty())
{
u = q.front();
q.pop();
b[u] = false;
for(register int pos = head[u];pos;pos = edge[pos].next)
{
v = edge[pos].v;
if(d[v] > d[u] + edge[pos].w)
{
d[v] = d[u] + edge[pos].w;
if(!b[v])
{
b[v] = true;
q.push(v);
cot[v] ++;
if(cot[v] >= n)return ;
}
}
}
}
return ;
} int main()
{
read(t);
register int tmp1,tmp2,tmp3;
for(;t;--t)
{
read(n);read(m);read(w);
memset(edge, , sizeof(edge));
memset(head, , sizeof(head));
cnt = ;
for(register int i = ;i <= m;++ i)
{
read(tmp1);read(tmp2);read(tmp3);
insert(tmp1, tmp2, tmp3);
insert(tmp2, tmp1, tmp3);
}
for(register int i = ;i <= w;i ++)
{
read(tmp1);read(tmp2);read(tmp3);
insert(tmp1, tmp2, - * tmp3);
}
if(!SPFA())
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return ;
}

T4暴力模拟没意思。。。不上了

NOIP模拟 6.30的更多相关文章

  1. noip模拟测试30

    考试总结:这次考试,不是很顺利,首先看了一眼题目,觉得先做T1,想了一会觉得没什么好思路,就去打暴力,结果我不会枚举子集,码了半天发现不对,就随便交了一份代码上去,结果CE了,然后去打T3,20min ...

  2. [NOIP模拟测试30]题解

    A.Return 出题人大概是怕自己的中文十级没人知道,所以写了这么一个***题面.可能又觉得这题太水怕全场A掉后自己面子过不去,于是又故意把输出格式说的含糊不清.(鬼知道"那么输出-1&q ...

  3. NOIP模拟测试30「return·one·magic」

    magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G ...

  4. noip模拟30[毛毛毛探探探]

    \(noip模拟30\;solutions\) 所以说,这次被初中的大神给爆了????? 其实真的不甘心,这次考场上的遗憾太多,浪费的时间过多,心情非常不好 用这篇题解来结束这场让人伤心的考试吧 \( ...

  5. NOIP模拟赛 by hzwer

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

  6. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  7. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

  8. CH Round #48 - Streaming #3 (NOIP模拟赛Day1)

    A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...

  9. 11.7 NOIP模拟赛

    目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...

随机推荐

  1. nginx 安装配置信息

    #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...

  2. PAT甲级——A1102 Invert a Binary Tree

    The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...

  3. fftw3.3.3在redhat4.4下安装

    FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言程序集,其由MIT的M.Frigo 和S. Johnson 开 ...

  4. 07_Spring事务处理

    一.事务概述 数据库的事务: 事务是一组操作的执行单元,相对于数据库操作来讲,事务管理的是一组SQL指令,比如增加,修改,删除等.事务的一致性,要求,这个事务内的操作必须全部执行成功,如果在此过程种出 ...

  5. 表格Table好看的样式表

    caption { padding: 0 0 5px 0; width: 700px; font: italic 11px "Trebuchet MS" , Verdana, Ar ...

  6. Hyper-V 2016 上安装windows7激活重启后黑屏无法进入系统

    激活重启后就出现下图,无法进入系统 出现此种情况是由于win7的开机引导损坏导致的,具体解决办法如下: 1.设置光盘启动 2.关闭系统重新启动进行修复 启动后按住shift+f10进行修复 输入以下命 ...

  7. 廖雪峰Java11多线程编程-2线程同步-1同步代码块

    1.线程安全问题 多个线程同时运行,线程调度由操作系统决定,程序本身无法决定 如果多个线程同时读写共享变量,就可能出现问题 class AddThread extends Thread{ public ...

  8. 第二章 Odoo 12开发之开发环境准备

    在更深入了解 Odoo 开发之前,我们应配置好开发环境并学习相关的基础管理任务.本文中,我们将学习创建 Odoo 应用所需用到的工具和环境配置.这里采用 Ubuntu 系统来作为开发服务器实例的主机, ...

  9. light oj 1037 状压dp

    #include <iostream> #include <cstdlib> #include <cstring> #include <queue> # ...

  10. PHP中的符号 ->、=> 和 :: 的含义(用法)

    php新手经常碰到的问题,->.=> 和 :: 这三个家伙是什么分别都是做什么的啊!看着就很晕. 没关系,下面我们做一下详细的解释,如果你有C++,Perl基础,你会发现这些家伙和他们里面 ...