Codeforces Round #326 (Div. 2) A
2015-10-31 17:00
281 查看
Codeforces Round #326 (Div. 2) A http://codeforces.com/contest/588/problem/A
A. Duff and Meattime limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Duff is addicted to meat! Malek wants to keep her happy for n days. In order to be happy in i-th
day, she needs to eat exactly ai kilograms
of meat.
There is a big shop uptown and Malek wants to buy meat for her from there. In i-th day, they sell meat for pidollars
per kilogram. Malek knows all numbers a1, ..., an and p1, ..., pn.
In each day, he can buy arbitrary amount of meat, also he can keep some meat he has for the future.
Malek is a little tired from cooking meat, so he asked for your help. Help him to minimize the total money he spends to keep Duff happy for n days.
Input
The first line of input contains integer n (1 ≤ n ≤ 105),
the number of days.
In the next n lines, i-th
line contains two integers ai and pi (1 ≤ ai, pi ≤ 100),
the amount of meat Duff needs and the cost of meat in that day.
Output
Print the minimum money needed to keep Duff happy for n days, in one line.
Sample test(s)
input
3 1 3 2 2 3 1
output
10
input
3 1 3 2 1 3 2
output
8
Note
In the first sample case: An optimal way would be to buy 1 kg on the first day, 2 kg on the second day and 3 kg on the third day.
In the second sample case: An optimal way would be to buy 1 kg on the first day and 5 kg (needed meat for the second and third day) on the second day.
简单分析,,Pi较下一个大的话,就买当天的,反之,Pi小的时候就把后面几天的都买下来,直到遇到下一个更小的pi。注意最后的结果超int范围了,用long long,但CF 的大数输出只能用%I64d。
有一个小技巧,Pi与之前的较小值m比较的时候,如果pi更小,则赋值给m,变量i减去1巧妙地在下一次循环中回到刚才的pi,m改变了,再一次比较。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstdlib>
#include<string>
#define maxx 100010
using namespace std;
int a[maxx],p[maxx];
int main()
{
int n;
long long m,x;
while(~scanf("%d",&n))
{
x=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i],&p[i]);
}
m=p[1];
for(int i=1;i<=n; i++)
{
if(m<=p[i])
x+=a[i]*m;
else
{
m=p[i];
i-=1;
}
}
printf("%I64d\n",x);
}
return 0;
}
相关文章推荐
- Java线程死锁
- 软件工程(八)——面向对象设计
- 富文本编辑框的使用
- ENVI5.1 从Landsat5数据学习大气纠正
- Android Marshmallow 6.0,Asking For Permission(未校验)
- iOS之CF和OC之间类型转换
- 友好时间输出
- 图片的上传
- C语言 - 数组做函数参数发生了什么?
- node.js+express验证码的实现
- Java线程间通讯
- node.js定时任务:node-schedule的使用
- SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT
- 括号匹配问题
- 关于二维数组和二维指针的理解总结
- C++ fill 和memset
- C++ fill 和memset
- thinkphp 第二节
- linux jni 实现JAVA与C 通讯
- “指针数组的陷阱题”