nyoj847 S + T(贪心)
S + T
- 描写叙述
-
给你一个长度为n的整数序列A1。A2,……,An,找出两个整数Ai和Aj(i<j),使得Ai-Aj尽量大。
- 输入
- 输入第一行为数据组数T(T<=100)。
每组数据的第一行为整数的个数n(2<=n<=100000);一下n行。每行为一个绝对值不超过150000的正整数。
(全部的数据都不超过2^64 - 1)
- 输出
- 对于每组数据,输出Ai –Aj的最大值、i值和j值。(假设有多个最大值,则输出先出现的最大值和i,j值)
- 例子输入
-
235 2 162 3 6 2 1 -1
- 例子输出
-
4 1 37 3 6
- 提示
- 假设你觉得数据太大,则本OJ推荐使用long long
- 来源
- 算法入门
- 上传者
userid=ACM_%E9%92%9F%E8%AF%97%E4%BF%8A" style="color:rgb(55,119,188)">ACM_钟诗俊
刚開始用的结构体优先队列,结果发现wa了几次才发现,i>j...也就是说前面的数减去后面数的最大值。
想想还是把wa的贴出来吧。AC贪心策略是,先把数据用数组保存起来。然后for循环从0-n筛选最大值,保存起来,从n-0筛选最小值,保存起来。
最后再用一个for循环寻找差的最大值。详细看以下ac代码。
wa:
#include <stdio.h>
#include <queue>
using namespace std;
struct node
{
long long t,num;
bool operator<(const node &a)const
{
if(num<a.num)
return true;
else if(num==a.num&&t<a.t)
return true;
else
return false;
}
};
priority_queue<node>s;
int main()
{
long long ncase,mark1,mark2,sum,n,mark;
node x,y1,y2,temp;
scanf("%lld",&ncase);
while(ncase--)
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&x.num);
x.t=i;
s.push(x);
}
y1=s.top();
while(s.size()>1)
{
temp=s.top();
if(temp.num!=y1.num)
break;
else
mark=temp.t,s.pop();
}
while(s.size()>1)
s.pop();
y2=s.top(),s.pop();
printf("%lld",y1.num-y2.num);
if(y1.num!=y2.num)
printf(" %lld %lld\n",mark,y2.t);
else
printf(" 1 2\n");
}
return 0;
}ac:
#include <stdio.h>
#include <string.h>
#define N 100005
long long num[N];
struct node
{
long long max,t1,min,t2;
}c[N];
int main()
{
long long t,n,temp,mark1,mark2;
scanf("%lld",&t);
while(t--)
{
memset(num,0,sizeof(num));
memset(&c,0,sizeof(&c));
scanf("%lld",&n);
temp=-150005;
for(int i=0;i<n;i++)
{
scanf("%lld",&num[i]);
if(temp<num[i])
temp=num[i],mark1=i+1;
c[i].max=temp;
c[i].t1=mark1;
}
temp=150005;
for(int i=n-1;i>=0;i--)
{
if(num[i]<=temp)
temp=num[i],mark2=i+1;
c[i].min=temp;
c[i].t2=mark2;
}
temp=-150005*2;
for(int i=0;i<n-1;i++)
{
if(temp<c[i].max-c[i+1].min)
temp=c[i].max-c[i+1].min,mark1=c[i].t1,mark2=c[i+1].t2;
}
printf("%lld %lld %lld\n",temp,mark1,mark2);
}
return 0;
}
nyoj847 S + T(贪心)的更多相关文章
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
- HDOJ 1051. Wooden Sticks 贪心 结构体排序
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]
1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 786 Solved: 391[Submit][S ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【BZOJ-4245】OR-XOR 按位贪心
4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 486 Solved: 266[Submit][Sta ...
- code vs 1098 均分纸牌(贪心)
1098 均分纸牌 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有 N 堆纸牌 ...
- 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心
SB贪心,一开始还想着用二分,看了眼黄学长的blog,发现自己SB了... 最小道路=已选取的奶牛/道路总数. #include <iostream> #include <cstdi ...
- 【贪心】HDU 1257
HDU 1257 最少拦截系统 题意:中文题不解释. 思路:网上有说贪心有说DP,想法就是开一个数组存每个拦截系统当前最高能拦截的导弹高度.输入每个导弹高度的时候就开始处理,遍历每一个拦截系统,一旦最 ...
随机推荐
- poj2117 Electricity
试题描述 求一个图删除一个点之后,联通块最多有多少. 输入 多组数据.第一行两个整数 P,C 表示点数和边数.接下来 C 行每行两个整数 p1,p2,表示 p1 与 p2 有边连接,保证无重边.读 ...
- 一次经典的tcp三次握手
TCP报头 在三次握手中使用的字段: 32位序列号 seq:表示的是本次报文发送的数据的第一个字节的序号. 32位确认号:ack 表示期望下一次应该接受到的报文的第一个字节的序号,若ack = N则 ...
- Java之多线程 Semaphore(信号量)
一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者. ...
- PHP 基础函数(二)数组的内部指针
current($arr); 返回数组中的当前单元pos($arr); 返回数组中的当前单元key($arr); 返回数组中当前单元的键名prev($arr); 将数组中的内部指针倒回一位ne ...
- Ehcache缓存时间设置
timeToLiveSeconds和timeToIdleSecondstimeToLiveSeconds=x:缓存自创建日期起至失效时的间隔时间x:timeToIdleSeconds=y:缓存创建以后 ...
- Pylons Controller里面Session.commit()总是出现rollback
Pylons Controller里面执行修改数据库表,总是不成功. 然后通过各种手段: 1.js打印返回值 2.不修改表单提交和修改表单提交,结果比较: 3.通过在Pylons Controller ...
- HDU 3966 Aragorn's Story (树链剖分+树状数组)
Aragorn's Story Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 数论E - Biorhythms(中国剩余定理,一水)
E - Biorhythms Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Subm ...
- qsort(),sort()排序函数
一.qsort()函数 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp ...
- DICOMDIR
DICOMDIR 是一个可变长度 迷你 database 文件.由 group (0002, xxxx) 和 group (0004, xxxx) 为主题.描述的是一个 4 层的树状结构 (tree ...