SRM 634 #DIV2

原创 2015年07月09日 00:09:01

SRM#634

250题目:

Tom is in charge of a tourist agency. He has a lovely picture of the local mountain range. He would like to sell it to the tourists but first he needs to know how many peaks are visible in the picture.
The mountain range in the picture can be seen as a sequence of heights. You are given these heights as a vector height. An element of height is called a peak if its value is strictly greater than each of the values of adjacent elements. Compute and return the number of peaks in the given mountain range.

题意:

求谷峰(即满足条件(h[i]>h[i-1]&&h[i]>h[i+1])

分析:

直接搞了,水题,注意边界

#include <iostream>
#include <cstring>
#include <deque>
#include <cmath>
#include <queue>
#include <stack>
#include <ctime>
#include <list>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <cstdio>
#include <functional>
#include <algorithm>
typedef long long LL;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )
using namespace std;
const int INF = 0x3f3f3f3f;
typedef pair<int,int>pil;
class MountainRanges {
public:
   int countPeaks( vector <int> heights ) {
       int sz=heights.size();
       if(sz==1)
          return 1;
       int ans=0;
       for(int i=0;i<sz;i++)
       {
           if(i==0&&heights[i]>heights[i+1])
             ans++;
           else if(i==sz-1&&heights[i]>heights[i-1])
             ans++;
           else if(heights[i]>heights[i-1]&&heights[i]>heights[i+1])
             ans++;
       }
       return ans;
   }
};

500题目:

A store sells M different items, conveniently numbered 0 through M-1. For a shopping survey you interviewed N customers. Each customer responded to the survey with a list of items they’ve bought. Each customer bought at most one of each item. It is possible that some customers did not buy anything at all.
After collecting the responses, you’ve summed up the results and found that s[i] people have bought item i. Due to an unfortunate accident, you’ve then lost the actual survey responses. All you have left are the values s[i] you computed.
You are now supposed to report the number of big shoppers among the survey respondents. A big shopper is defined as a customer who has bought all M items. Of course, having lost the detailed responses, you might be unable to determine the actual number of big shoppers.
You are given the int N and the vector s with M elements. Compute and return the smallest possible number of big shoppers.

题意:

这道题比较有意思,就是说有N个人,M种物品,每个人可以选任意件,但每种商品每个人最多选一个,给你每种商品有多少人选,问你最少有多少人选了全部商品

分析:

注意到N<=100,那么可以直接枚举有多少人选了全部物品,然后看剩余的选择(N-i)个人能不能完成,即res<=(N-i)(n-1)

#include <iostream>
#include <cstring>
#include <deque>
#include <cmath>
#include <queue>
#include <stack>
#include <ctime>
#include <list>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <cstdio>
#include <functional>
#include <algorithm>
typedef long long LL;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )
using namespace std;
const int INF = 0x3f3f3f3f;
typedef pair<int,int>pil;
class ShoppingSurveyDiv2 {
public:
   int minValue( int N, vector <int> s ) {
       int sum=0;
       int n=s.size();
       for(int i=0;i<n;i++)
          sum+=s[i];
       for(int i=0;i<=N;i++)
       {
          int res=sum-i*n;
          if(res<=(N-i)*(n-1))
            return i;
       }
   }
};

1000题目:

A string S is called special if it satisfies the following two properties:
Each character in S is either ‘0’ or ‘1’.
Whenever S = UV where both U and V are nonempty strings, U is strictly smaller than V in lexicographic order.
For example, the string S = “00101” is special because we have “0” < “0101”, “00” < “101”, “001” < “01”, and “0010” < “1”.
You are given a string current that is guaranteed to be special. Let N be the length of current. Consider the lexicographically sorted list of all special strings of length N. Compute and return the string that comes immediatelly after current in this list. If current happens to be the last string in the list, return an empty string instead.

题意:

告诉你一种特殊的串,给定一个这样的串,问你下一个这样的串

分析:

这道题开始虽然注意到要从前到后找0,但是最后没想好,我们知道给定长度的串,全是1肯定不符合,那么从前到后找0的过程中,发现0后,将这个位置以后的都置为1,然后逐位变成0,看是否符合,不符合再变成1

#include <iostream>
#include <cstring>
#include <deque>
#include <cmath>
#include <queue>
#include <stack>
#include <ctime>
#include <list>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <cstdio>
#include <functional>
#include <algorithm>
typedef long long LL;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )
using namespace std;
const int INF = 0x3f3f3f3f;
typedef pair<int,int>pil;
bool ok(string s,int len)
{
    string s1,s2;
    for(int i=0;i<len-1;i++)
    {
        s1="";s2="";
        for(int j=0;j<=i;j++)
            s1+=s[j];
        for(int j=i+1;j<len;j++)
            s2+=s[j];
        if(s1>s2||s1==s2)
            return false;
    }
    return true;
}
class SpecialStrings {
public:
   string findNext( string current ) {
       int len=current.length();
       for(int i=len-1;i>=0;i--)
       {
            if(current[i]=='0')
            {
                string s=current;
                for(int j=i;j<len;j++)
                    s[j]='1';
                if(ok(s,len))
                {
                    for(int j=i+1;j<len;j++)
                    {
                        s[j]='0';
                        if(!ok(s,len))
                            s[j]='1';
                    }
                    return s;
                }
            }
       }
       return "";
   }
};

相关文章推荐

TopCoder SRM 634 Div.2[ABC]

TopCoder SRM 634 Div.2[ABC] ACM 题目地址: TopCoder SRM 634 赛后做的,感觉现场肯定做不出来Orz,简直不能多说。 Level One-M...
  • hcbbt
  • hcbbt
  • 2014年09月27日 21:02
  • 1909

TC SRM 388 div 2 problem 3

  • 2012年04月16日 22:16
  • 2KB
  • 下载

TopCoder SRM 558 DIV2 Level 3:CatAndRabbit

题目:http://community.topcoder.com/stat?c=problem_statement&pm=12187 题目大意:给定N个瓷砖(分为黑色和白色), A先走, A,B 轮...

SRM 669 DIV 2 CombiningSlimes 500-point

Problem StatementThe idols Ami and Mami like playing games. Today they bought a new game. At the beg...

TopCoder SRM DIV2 Level 3: RelativelyPrimeSubset

题目: http://community.topcoder.com/stat?c=problem_statement&pm=12074&rd=14739 题目大意: 给定n个正整数,从其中选取k...

SRM 598 DIV2 1000 FoxAndFencingEasy

Problem Statement     Fox Ciel is playing a board game with her friend Squirrel Liss. The game is p...

SRM 584div2

昨天做TC手一抖浪费了涨rating的大好机会, 本来三题都会的500pt写挂了, 有个小bug, 1000pt本来就打算试试的最后没调试完, 其实再有一分钟就能debug完的, 最后只出了一题, 悲...
  • tjdrn
  • tjdrn
  • 2013年07月11日 11:10
  • 605

Topcoder SRM 616 Div2 1000 TwoLLogo

TwoLLogoTask: 给定一个n∗mn*m的平面图,由’.’与’#’构成,现要在’.’处画出两个LL形图案,要求两个LL不能相交,求方案数,答案对PP取模。(n...
  • zqh_wz
  • zqh_wz
  • 2016年09月14日 17:45
  • 116

SRM 606 div2 500 EllysNumberGuessing

猜数字。。。判断什么时候是lied情况挺多,写的很麻烦。。。 Problem Statement   Elly and Kris play the follow...

Topcoder SRM536 div2 1000pt

此题乃dp!先排个序,dp[ x ][ y ]每次记录合并 X 次把前 Y 个公司全部合并所能长生的最大利润,有点贪心的思想,贪心确实是成立的,合并每个公司相当于对每个公司附一个权值,由于是算他们的算...
  • zz_1215
  • zz_1215
  • 2012年03月08日 14:32
  • 433
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SRM 634 #DIV2
举报原因:
原因补充:

(最多只允许输入30个字)