SRM 634 #DIV2
来源:互联网 发布:打开蜂窝数据上没有4g 编辑:程序博客网 时间:2024/05/20 22:28
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 634 #DIV2
- SRM 634-500 Shopping Survey Div2
- TopCoder SRM 634 Div2 Problem 1000 - SpecialStrings
- TopCoder SRM 634 Div2 Problem 500 - ShoppingSurvey
- SRM 114 DIV2 [550]
- SRM 398 DIV2 [250]
- SRM 399 DIV2 [250]
- SRM 387 DIV2 [250]
- SRM 387 DIV2 [600]
- SRM 397 DIV2 [500]
- SRM 400 DIV2 [250]
- SRM 400 DIV2 [500]
- SRM 397 DIV2 [1000]
- SRM 405 DIV2
- SRM 421Div2 500
- SRM 457 Div2 500
- SRM 465(DIV1 DIV2)
- SRM 465(DIV1 DIV2)
- [CodeEdit--Sublime]Sublime热键
- 《Python学习手册》学习笔记——第4章
- mybatis自动生成工具
- Android 自定义DialogFragment替代popupwindow
- Kth Smallest Element in a BST
- SRM 634 #DIV2
- java.util.Date和java.sql.Date
- Kafka 学习笔记(一)
- POJ 1195 Mobile phones(二维树状数组)
- 提高日志质量的 5 大技巧
- 红黑树(Red-Black tree)(插入与删除操作)
- dbcp的简单配置
- jsp文件包含
- Collection-List/ArrayList/LinkedList/Vector