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 "";
   }
};

SRM 649 div2 1000

题意: 给一个整数序列。 选择一个整数B,将序列中所有数XOR上B后得到另一个序列。。 顺序对:a[i]...
  • slowlight93
  • slowlight93
  • 2015年02月12日 18:31
  • 499

TopCoder SRM 634 Div2 Problem 500 - ShoppingSurvey

题意 有N个人,现在知道每个商品被买了ki次,求最少的,买了全部商品的人数。 思路 要尽量不让一个人买完商品,也就是尽量把商品卖给不同的人。 我用num[i],表示第i...
  • u014247806
  • u014247806
  • 2014年09月27日 16:27
  • 870

TopCoder SRM 634 Div2 Problem 1000 - SpecialStrings

题意 给一个字符串,求满足条件的下一个字典序的字符串。 条件:字符串首位和第i位的字符串的字典序比和i+1到末尾的字符串小 思路 从后面往前搜索。碰到第一个0,就把它变...
  • u014247806
  • u014247806
  • 2014年09月27日 16:18
  • 1289

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
  • 1944

SRM 397 DIV2 [1000]

#includeiostream>#includevector>#includeset>#includealgorithm>using namespace std;class CollectingMa...
  • f22fbi
  • f22fbi
  • 2008年05月02日 00:12
  • 272

SRM 513 div2

两个号终于都蓝了……接下来坐等回绿= =|||250pt:水题,不解释,三重循环判断即可vector ans; string ret; class TrainingCamp { p...
  • magicnumber
  • magicnumber
  • 2011年07月28日 13:56
  • 521

SRM 552 DIV2

第一题: 题意:给一个包含‘F’和'.'的矩阵,'F'代表花,'.'代表空地,给你一个r,c,表示第r行第c列的那个点不可选,问题包含最多'F'的矩阵中有多少'F'。 题解:枚举以r,c划分的九个...
  • ACM_Ted
  • ACM_Ted
  • 2012年08月17日 17:04
  • 446

SRM 599 DIV2 950

太弱了。。。。这么简单的题也只能比赛之后写。。。。。 roblem Statement   Fox Ciel has a list of names on her...
  • u012797220
  • u012797220
  • 2013年12月06日 20:55
  • 1113

SRM 546 div2

连续3场混迹div2了,还是绿的。。。 250pt      数据比较小,可以开个数组搞。。。大的话可以用map 550pt      数据比较小,可以直接暴搜1000*1000的格子...
  • wilsonlym
  • wilsonlym
  • 2012年06月17日 18:07
  • 163

SRM 498 div2

250pt: 题意:就是黑板上有三个数,有n次选择的机会,每次选择哪个数可以得到和那个数相同的分数,然后黑板上的该数减一。求n次选择最多能得到多少分。(注意分数减到0后就不在减)。 思路:水题啊,...
  • wmn_wmn
  • wmn_wmn
  • 2012年07月30日 20:32
  • 536
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SRM 634 #DIV2
举报原因:
原因补充:

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