POJ 2586&&CF 245E
2014-03-05 21:25
176 查看
贪心策略
(这题是真没读懂什么意思)
每连续5个月都是亏损,在贪心选择下,必定会选择尽可能多的盈利月数X,但要使得X*S<(5-X)*d;
而这8个阶段中相邻的阶段都会都相同的四个月的子集,如阶段 1 为 1 - 5 月,阶段 2 为 2 - 6 月,其中的 2 - 5 月就是
公共子集,故应该尽可能在这些重叠区间内安放亏损月以满足题目要求
从而列举所有情况:
1 .若SSSSD亏空,那么全年可能最大盈利情况为: SSSSDSSSSDSS
2.若SSSDD亏空,那么全年可能最大盈利情况为: SSSDDSSSDDSS
3.若SSDDD亏空,那么全年可能最大盈利情况为::SSDDDSSDDDSS
4.若SDDDD亏空,那么全年可能最大盈利情况为::SDDDDSDDDDSD
5.若DDDDD亏空,那么全年可能最大盈利情况为: DDDDDDDDDDDD
Polycarpus just has been out of luck lately! As soon as he found a job in the "Binary Cat" cafe, the club got burgled. All ice-cream was stolen.
On the burglary night Polycarpus kept a careful record of all club visitors. Each time a visitor entered the club, Polycarpus put down character "+" in his notes. Similarly, each time a visitor left the club, Polycarpus
put character "-" in his notes. We know that all cases of going in and out happened consecutively, that is, no two events happened at the same time. Polycarpus doesn't remember whether there was somebody in the club at
the moment when his shift begun and at the moment when it ended.
Right now the police wonders what minimum number of distinct people Polycarpus could have seen. Assume that he sees anybody coming in or out of the club. Each person could have come in or out an arbitrary number of times.
Input
The only line of the input contains a sequence of characters "+" and "-", the characters are written one after another without any separators. The characters are written in the
order, in which the corresponding events occurred. The given sequence has length from 1 to 300 characters, inclusive.
Output
Print the sought minimum number of people
Sample Input
Input
Output
Input
Output
[cpp] view
plaincopy
/*此题要求看过的最少人数。如果看到之前看到人进去,现在看到人出去。那么就把他当做之前看过进去的人
如果之前看到人出去,现在又看到人进去,也把他们当做同一个人。此题转换为根据我做的进出记录,同时在商店
中的最大人数*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
char A[308];
int main()
{
while(cin>>A)
{
int len=strlen(A);
int in=0,out=0,sum=0;
for(int i=0;i<len;i++)
{
if(A[i]=='+')
{
in++;
if(out) out--;
else sum++;
}
else
{
out++;
if(in) in--;
else sum++;
}
}
cout<<sum<<endl;
}
return 0;
}
(这题是真没读懂什么意思)
每连续5个月都是亏损,在贪心选择下,必定会选择尽可能多的盈利月数X,但要使得X*S<(5-X)*d;
而这8个阶段中相邻的阶段都会都相同的四个月的子集,如阶段 1 为 1 - 5 月,阶段 2 为 2 - 6 月,其中的 2 - 5 月就是
公共子集,故应该尽可能在这些重叠区间内安放亏损月以满足题目要求
从而列举所有情况:
1 .若SSSSD亏空,那么全年可能最大盈利情况为: SSSSDSSSSDSS
2.若SSSDD亏空,那么全年可能最大盈利情况为: SSSDDSSSDDSS
3.若SSDDD亏空,那么全年可能最大盈利情况为::SSDDDSSDDDSS
4.若SDDDD亏空,那么全年可能最大盈利情况为::SDDDDSDDDDSD
5.若DDDDD亏空,那么全年可能最大盈利情况为: DDDDDDDDDDDD
#include <iostream> #include <cctype> #include <string> #include <stdio.h> using namespace std ; int main() { int s, d, re; while(scanf("%d%d",&s, &d)!=EOF) { if(4*s-d<0) re = 10*s-2*d; else if(3*s-2*d<0) re = 8*s-4*d; else if(2*s-3*d<0) re = 6*s-6*d; else if(s-4*d<0) re = 3*s-9*d; else re = -1; if(re<0) printf("Deficit\n"); else printf("%d\n", re); } }
CF 245E
DescriptionPolycarpus just has been out of luck lately! As soon as he found a job in the "Binary Cat" cafe, the club got burgled. All ice-cream was stolen.
On the burglary night Polycarpus kept a careful record of all club visitors. Each time a visitor entered the club, Polycarpus put down character "+" in his notes. Similarly, each time a visitor left the club, Polycarpus
put character "-" in his notes. We know that all cases of going in and out happened consecutively, that is, no two events happened at the same time. Polycarpus doesn't remember whether there was somebody in the club at
the moment when his shift begun and at the moment when it ended.
Right now the police wonders what minimum number of distinct people Polycarpus could have seen. Assume that he sees anybody coming in or out of the club. Each person could have come in or out an arbitrary number of times.
Input
The only line of the input contains a sequence of characters "+" and "-", the characters are written one after another without any separators. The characters are written in the
order, in which the corresponding events occurred. The given sequence has length from 1 to 300 characters, inclusive.
Output
Print the sought minimum number of people
Sample Input
Input
+-+-+
Output
1
Input
---
Output
3
[cpp] view
plaincopy
/*此题要求看过的最少人数。如果看到之前看到人进去,现在看到人出去。那么就把他当做之前看过进去的人
如果之前看到人出去,现在又看到人进去,也把他们当做同一个人。此题转换为根据我做的进出记录,同时在商店
中的最大人数*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
char A[308];
int main()
{
while(cin>>A)
{
int len=strlen(A);
int in=0,out=0,sum=0;
for(int i=0;i<len;i++)
{
if(A[i]=='+')
{
in++;
if(out) out--;
else sum++;
}
else
{
out++;
if(in) in--;
else sum++;
}
}
cout<<sum<<endl;
}
return 0;
}
相关文章推荐
- CF-Mr. Kitayuta&#39;s Colorful Graph
- 实战智能推荐系统(9)-- UserCF & ItemCF
- 实战智能推荐系统(9)-- UserCF & ItemCF
- 【CF 617E】 XOR and Favorite Number (Mo's algorithm)
- CF->CodeForces 137B
- [线段树][单调栈] BZOJ 4527 && CF 407E: K-D-Sequence
- 快速切题CF 158B taxi 构造 && 82A double cola 数学观察 难度:0
- <cf>Sysadmin Bob
- 实战智能推荐系统(9)-- UserCF & ItemCF
- 实战智能推荐系统(9)-- UserCF & ItemCF
- CF->CodeForces 137C
- CF Round #218 (Div. 2) && CF 371D Vessels【并查集】
- CF&&CC百套计划1 Codeforces Round #449 B. Ithea Plays With Chtholly
- 在.Net CF(C#)中捕获输入法面板(InputPanel&SIP)高度改变事件
- CF 12D BALL 线段树 && 树状数组
- CF 317A(Perfect Pair-广义Fib序列p,q=1性质2&加法增长极)
- 在.net cf(C#)中捕获输入法面板(InputPanel&SIP)高度改变事件
- 在.net cf(C#)中捕获输入法面板(InputPanel&SIP)高度改变事件
- CF 433C Ryouko's Memory Note
- Poj 1741&&CF 161D 点分治入门