Topcoder SRM 709 DIV 2 250pt Robofactory solution
来源:互联网 发布:sql serve 编辑:程序博客网 时间:2024/05/01 09:20
Problem Statement
Hero owns a factory. There are n robots working at the factory. The robots are numbered 0 through n-1.
Today, exactly one of the robots became corrupted. Hero has decided to give all robots a test that may determine the number of the corrupted robot. The test works as follows: For each x from 0 to n-1, in order, Hero tells robot x a positive integer and the robot answers whether the integer is odd or even. Each normal robot will always give the correct answer. The corrupted robot may sometimes give the opposite answer. More precisely: the corrupted robot will answer incorrectly if and only if the previous robot was given an odd number. In particular, if robot 0 is the corrupted robot, it will give the correct answer (as there is no previous robot).
You are given a log of the test: a vector <int> query and a vector <string> answer, each with n elements. For each x, query[x] is the positive integer given to robot x, and answer[x] is the answer given by the robot: either "Odd" or "Even".
It is guaranteed that the situation described by query and answer could have occurred as described above. If it is possible to determine the index of the corrupted robot, return it. Otherwise, return -1.
Definition
Class:
Robofactory
Method:
reveal
Parameters:
vector <int>, vector <string>
Returns:
int
Method signature:
int reveal(vector <int> query, vector <string> answer)
(be sure your method is public)
Limits
Time limit (s):
2.000
Memory limit (MB):
256
Stack limit (MB):
256
Constraints
-
n will be between 1 and 50, inclusive.
-
query and answer will contain exactly n elements.
-
Each element in query will be between 1 and 1000, inclusive.
-
Each element in answer will be either "Odd" or "Even".
-
It is guaranteed that there will be at least one possible number of the corrupted robot.
Examples
0)
{3,2,2}
{"Odd", "Odd", "Even"}
Returns: 1
Robot 1 gave the wrong answer. Thus, robot 1 is the corrupted robot.
1)
{1,3,5,10}
{"Odd", "Odd", "Odd", "Even"}
Returns: 0
All robots gave correct answers. Still, we can deduce that the corrupted robot must be robot 0. For example, robot 1 cannot be the corrupted robot: as robot 0's number was odd, robot 1 would have answered incorrectly if it were corrupted.
2)
{2,3,5,10}
{"Even", "Odd", "Odd", "Even"}
Returns: -1
Again, all robots gave correct answers. This time we cannot be sure which robot is corrupted. All we know is that it is either robot 0 or robot 1. Both possibilities are consistent with the given input data. Thus, we should return -1.
3)
{2,4,6,10}
{"Even", "Even", "Even", "Even"}
Returns: -1
4)
{107}
{"Odd"}
Returns: 0
5)
{1,1,1}
{"Odd", "Odd", "Even"}
Returns: 2
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)2003, TopCoder, Inc. All rights reserved.
Solution:
The key of this problem is to remember that there's exactly one corrupted robot. We could assume that robot#0 is not at first, and then search the next n - 1 robots. Once we find a robot that does not satisfy "the corrupted robot will answer incorrectly if and only if the previous robot was given an odd number", it's the corrupted robot. When we are searching throw robot #1 to robot #n - 1, we record the number of robots whose previous robot number is even because we cannot judge if the robot is the corrupted one.
Finally, if we have more than 0 robots undecided with 0 robots that are corrupted, print "-1" because we don't know which one is corrupted between robot #0 and robots undecided.
if we have 0 robots undecided remained, print "0" because we know there's one robot that is corrupted and it must be robot #0.
Code:
#include <bits/stdc++.h>using namespace std;int a[1002];map <string, int> m;class Robofactory{ public: int reveal(vector<int> query, vector <string> answer){ m["Odd"] = 1, m["Even"] = 0; int different = 0, wrong = -1; a[0] = query[0] % 2; //if(a[0] == m[answer[0]]) wrong++; else different++; for(int i = 1; i < query.size(); i++){ a[i] = query[i] % 2; if(a[i - 1] == 0) different++; if(m[answer[i]] != a[i]){ if(a[i - 1] == 1) wrong = i; } } if(wrong != -1) { return wrong; } else{ if(different == 0) return 0; else return (-1); } }};
- Topcoder SRM 709 DIV 2 250pt Robofactory solution
- Topcoder SRM 709 DIV 2 500pt Permatchd2 solution
- [TopCoder] SRM 578 DIV 2, Goose In Zoo, Solution
- [TopCoder] SRM 579 DIV 2, Marble Positioning, Solution
- [TopCoder] SRM 586 DIV 2, 500p, 1000p, Solution
- [TopCoder] SRM 580 DIV 2, 250p, 500p, 1000p, Solution
- [TopCoder] SRM 581 DIV 2, 250p, 500p, 1000p, Solution
- [TopCoder] SRM 587 DIV 2, 250p, 500p, 1000p, Solution
- 【topcoder SRM 702 DIV 2 250】TestTaking
- Topcoder SRM 462 DIV 2
- topcoder srm 518 div 2
- TopCoder SRM 561 Div 2
- Topcoder SRM 565 Div.2
- Topcoder SRM 628 DIV 2
- TopCoder SRM 144 DIV 2
- Topcoder SRM 544 1000pt
- Topcoder SRM 569 1000pt
- TopCoder算法竞赛题2:SRM 146 DIV 2, 250-point
- xzvfswesdasjhfjchjqwdhjhjxckjvwb
- 【错误】为什么在网上下载一个图片,命名为select*from ,结果你会发现保存不了,这是为什么?
- 【技巧】desc +表名;
- codeforces AIM Tech Round 3 (Div. 2)
- Codeforces Round #369 (Div. 2)
- Topcoder SRM 709 DIV 2 250pt Robofactory solution
- Topcoder SRM 709 DIV 2 500pt Permatchd2 solution
- Java MD5加密原理分析及代码示例
- Markov Chain
- 抽象类和接口区别
- virtualbox虚拟机NAT模式下不能连接外网
- 大整数运算(支持正负数、加减乘除)
- 算法之辅助工具类
- 使用国内docker镜像源