开始接触Topcode..div2..

250题目:

Problem Statement
    
You are given a String s consisting of lower case letters. We assign the letters 'a' to 'z' values of to , respectively. We will denote the value assigned to the letter X by val[X]. For example, val['a'] = and val['e'] = .
We define the value of the string s as follows. For each letter s[i], let k[i] be the number of letters in s that are less than or equal to s[i], including s[i] itself. Then, the value of s is defined to be the sum of k[i] * val[s[i]] for all valid i.
Given the string, compute and return the value of the string.
Definition
    
Class:
ValueOfString
Method:
findValue
Parameters:
String
Returns:
int
Method signature:
int findValue(String s)
(be sure your method is public)
Limits
    
Time limit (s):
2.000
Memory limit (MB): Stack limit (MB): Constraints
-
s will contain between and characters, inclusive.
-
s will consist of lowercase letters ('a'-'z').
Examples
)     
"babca"
Returns:
The value of this string is * + * + * + * + * = .
We can get the value as follows. The first character is a 'b' which has value , and has characters that are less than or equal to it in the string (i.e. the first, second, third and fifth character of the string). Thus, this first character contributes * to the sum. We can derive a similar expression for each of the other characters.
)     
"zz"
Returns: )     
"y"
Returns: )     
"aaabbc"
Returns: )     
"topcoder"
Returns: )     
"thequickbrownfoxjumpsoverthelazydog"
Returns: )     
"zyxwvutsrqponmlkjihgfedcba"
Returns: This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c), TopCoder, Inc. All rights reserved.

根据题意直接搞~

代码:

#include <string>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std; class ValueOfString
{
public:
int findValue( string s )
{
int res = ;
int cnt[] , val[] ;
for( int i = ; i < ; ++i ) {
cnt[i] = ; val[i] = i + ;
}
for( int i = ; i < s.length() ; ++i ) {
cnt[ s[i]-'a' ]++;
}
for( int i = ; i < ; ++i ) cnt[i] += cnt[i-] ;
for( int i = ; i < s.length() ; ++i ) {
res += cnt[ s[i] - 'a' ] * val[ s[i]-'a' ] ;
}
return res ;
}
};

500题目:

Problem Statement
    
Alice and Bob are playing a game called "The Permutation Game". The game is parameterized with the int N. At the start of the game, Alice chooses a positive integer x, and Bob chooses a permutation of the first N positive integers. Let p be Bob's permutation. Alice will start at 1, and apply the permutation to this value x times. More formally, let f(1) = p[1], and f(m) = p[f(m-1)] for all m >= 2. Alice's final value will be f(x). Alice wants to choose the smallest x such that f(x) = for any permutation Bob can provide. Compute and return the value of such x.
Definition
    
Class:
ThePermutationGameDiv2
Method:
findMin
Parameters:
int
Returns:
long long
Method signature:
long long findMin(int N)
(be sure your method is public)
Limits
    
Time limit (s):
2.000
Memory limit (MB): Stack limit (MB): Notes
-
The return value will fit into a signed -bit integer.
-
A permutation of the first N positive integers is a sequence of length N that contains each of the integers through N exactly once. The i-th (-indexed) element of a permutation p is denoted by p[i].
Constraints
-
N will be between and inclusive.
Examples
)      Returns:
Bob can choose the permutations {,} or {,}. If Alice chooses , then, Bob can choose the permutation {,}, which would would make f() = . However, if Alice chooses , no matter which permutation Bob chooses, Alice will get f() = . Thus the answer in this case is .
)      Returns: )      Returns: )      Returns: )      Returns: This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c), TopCoder, Inc. All rights reserved.

模拟完yy一下应该是 1 ~ n 的 LCM , 结果对了。。

代码:

#include <string>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std; class ThePermutationGameDiv2
{
public:
long long gcd( long long a , long long b ) { return b == ? a : gcd( b , a % b ) ; }
long long LCM( long long a , long long b ) { return a/gcd(a,b)*b; }
long long findMin( int n )
{
long long res = ;
for( int i = ; i <= n ; ++i ) {
res = LCM( res , i ) ;
}
return res ;
}
};

1000题目:

Problem Statement
    
Roger the Robot has been sent to explore a planet. The surface of the planet can be thought of as a two-dimensional plane. You are given two int[]s x and y. The planet has N interesting points described by these int[]s. The i-th interesting point has coordinates (x[i], y[i]). No three interesting points will be collinear.
Roger will choose a permutation of {,,...,N-}, and will visit the points in that order. Roger will travel in a straight line in between points. There are two conditions he must follow:
He must never cross his own path (that is, if we look at the line segments formed by the path, no two segments strictly intersect).
Due to rather unfortunate oversight, Roger is incapable of making any right turns. This means that for any three consecutive points that he visits, these three points constitute a counter-clockwise orientation.
Your job is to find a path that Roger can take. If there is no valid path, return an empty int[]. Otherwise, return an int[] containing a permutation of ,...,N-, representing a valid path that Roger can take.
Definition
    
Class:
NoRightTurnDiv2
Method:
findPath
Parameters:
int[], int[]
Returns:
int[]
Method signature:
int[] findPath(int[] x, int[] y)
(be sure your method is public)
Limits
    
Time limit (s):
2.000
Memory limit (MB): Stack limit (MB): Constraints
-
x will contain between and elements, inclusive.
-
y will contain exactly the same number of elements as x.
-
Each element of x,y will be between -, and ,, inclusive.
-
All pairs (x[i], y[i]) will be distinct.
-
No three points will be collinear.
Examples
)     
{-, , }
{, -, }
Returns: {, , }
The points form a triangle. Any of the following return values will be accepted: {,,},{,,},{,,}
)     
{,,-,-,,}
{-,,-,,-,}
Returns: {, , , , , }
Here is a picture of the points: Here is an example of a different valid solution. This would correspond to a return value of {,,,,,} )     
{,,,,,,,,,}
{,,,,,,,,,}
Returns: {, , , , , , , , , } )     
{, ,-, ,-, ,-, }
{, , , , , , , }
Returns: {, , , , , , , } )     
{-,,,,-,,,,,,-,-,-,,-,-,-,-,,,,,
,-,,,,,,-,,-,-,,-,-,,-,,,,-,-,,
,,,,-,}
{-,,,-,-,,,,,-,-,-,,-,,-,,-,-,-,,-,
,-,-,,,-,,,,-,-,-,-,-,,,,-,-,-,-,
-,,,-,-,,-}
Returns:
{, , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , } This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c), TopCoder, Inc. All rights reserved.

给出n个点求出一条路径,这路径必须满足只能向左拐,能够走过n个点,路径没有交叉的方案。

先找出边角点作为起点,然后贪心,枚举点,找左拐角度最微的点作为下一个点

代码:

#include <string>
#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <map>
using namespace std;
typedef pair<int,int> pii;
const int N = ;
struct Point {
int x , y , idx ;
Point(){};
Point( int x , int y ):x(x),y(y){}
bool operator < ( const Point a )const {
if( x != a.x ) return x < a.x;
else return y < a.y ;
}
}p[N]; Point operator - ( const Point a , const Point b ){
return Point( a.x - b.x , a.y - b.y );
} int Cross( Point A , Point B ) { return A.x*B.y-A.y*B.x; } bool vis[N]; class NoRightTurnDiv2
{
public:
vector<int> findPath( vector<int> x, vector<int> y )
{
vector<int>res ;
int n = x.size();
for( int i = ; i < n ; ++i ) {
p[i].x = x[i] , p[i].y = y[i];
p[i].idx = i ;
if( p[i].y < p[].y || p[i].y == p[].y && p[i].x > p[].x ) swap( p[] , p[i] );
}
memset( vis , false , sizeof vis );
vis[] = true ; res.push_back( p[].idx );
int pre = ;
for( int i = ; i < n ; ++i ) {
int now = - ;
for( int j = ; j < n ; ++j ) if( !vis[j] ) {
if( now == - ) now = j ;
else {
if( Cross( p[pre] - p[now] , p[pre] - p[j] ) <= ) {
now = j ;
}
}
}
vis[now] = true ;
res.push_back( p[now].idx ) ;
pre = now ;
}
return res ;
}
};

Topcoder SRM652div2的更多相关文章

  1. TopCoder kawigiEdit插件配置

    kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...

  2. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  3. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  4. Topcoder几例C++字符串应用

    本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...

  5. TopCoder

    在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...

  6. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  7. 求拓扑排序的数量,例题 topcoder srm 654 div2 500

    周赛时遇到的一道比较有意思的题目: Problem Statement      There are N rooms in Maki's new house. The rooms are number ...

  8. TopCoder SRM 590

     第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement     Fox Ciel is going to play Gomoku with her friend ...

  9. Topcoder Arena插件配置和训练指南

    一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...

随机推荐

  1. 2018-8-10-C#-TimeSpan-时间计算

    title author date CreateTime categories C# TimeSpan 时间计算 lindexi 2018-08-10 19:16:51 +0800 2018-06-1 ...

  2. postgres - 以单用户模式运行一个 PostgreSQL服务器

    SYNOPSIS postgres [ -A 0 | 1] [ -B nbuffers] [ -c name=value] [ -d debug-level] [ --describe-config ...

  3. 认知redis

    一.redis是什么? 1.基于key-value的内存No sql 数据库(非关系型数据库) 2.读写性能非常好 二.redisd的数据类型有哪些?特点分别是什么? 1)string 一个键对一个值 ...

  4. BZOJ3129/洛谷P3301方程(SDOI2013)容斥原理+扩展Lucas定理

    题意:给定方程x1+x2+....xn=m,每个x是正整数.但是对前n1个数做了限制x1<=a1,x2<=a2...xn1<=an1,同时对第n1+1到n1+n2个数也做了限制xn1 ...

  5. Redux中间件之redux-thunk使用详解

    Redux的核心概念其实很简单:将需要修改的state都存入到store里,发起一个action用来描述发生了什么,用reducers描述action如何改变state tree .创建store的时 ...

  6. ps:消除锯齿和羽化

    我们使用椭圆选框工具,分别关闭和打开消除锯齿(也称抗锯齿),创建两个差不多大的正圆形选区,然后填充黑色看看.怎样快速填充黑色还记得吗?先[X]然后[ALT DELETE].填充之后取消选择[CTRL ...

  7. 二、MyBatis-HelloWorld

    环境准备 1.创建数据库表 create table tbl_employee ( id ) primary key AUTO_INCREMENT comment "ID", la ...

  8. 前端每日实战:35# 视频演示如何把 CSS 径向渐变用得出神入化,只用一个 DOM 元素就能画出国宝熊猫

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/odKrpy 可交互视频教程 此视频 ...

  9. linux运维、架构之路-Nginx反向代理

    一. Nginx负载均衡和反向代理知识 1.集群概念   一堆服务器合作做同一件事,这些机器可能需要整个技术团队架构.设计和统一协调管理,这些机器可以分布在一个机房,也可以分布在全国各个地区的多个机房 ...

  10. linux常用基本命令 grep awk 待优化

    查看centos操作系统版本:cat /etc/centos-release 切换到当前用户主目录:cd 或者cd ~ 创建文件夹/a/b/c:mkdir -pv /a/b/c.如果/a/b/c的父目 ...