Problem Statement
Recently, Alice had to take a test. The test consisted of a sequence of true/false questions. Alice was completely unprepared for the test, so she just guessed each answer.
You are given the following inputs:
an int questions: the number of questions on the test.
an int guessed: the number of questions for which Alice guessed that the answer is “true”.
an int actual: the actual number of questions for which the answer is “true”.
In the test, each correct answer was worth 1 point and each incorrect answer was worth 0 points. Compute the largest possible number of points Alice could have received.
Definition
Class:
TestTaking
Method:
findMax
Parameters:
int, int, int
Returns:
int
Method signature:
int findMax(int questions, int guessed, int actual)
(be sure your method is public)
Limits
Time limit (s):
2.000
Memory limit (MB):
256
Stack limit (MB):
256
Constraints
questions will be between 1 and 50, inclusive.
guessed, actual will be between 0 and questions, inclusive.
Examples
0)
3
1
2
Returns: 2
The test consisted of 3 statements.
Alice guessed that 1 of them is true.
Actually, there were 2 true statements on the test.
There are multiple possible outcomes of the test.
For example, it is possible that Alice wrote down the sequence of answers (false,true,false), but the correct sequence of answers is (true,false,true). In this case Alice would have received 0 points.
One possible best scenario for Alice looks as follows: Alice guessed that the answers are (false,false,true), and the correct answers are (true,false,true). In this scenario Alice would have received 0+1+1 = 2 points.
1)
3
2
1
Returns: 2
2)
5
5
0
Returns: 0
Alice guessed five times “true”, but all five correct answers were “false”. Thus, Alice certainly received 0 points.
3)
10
8
8
Returns: 10
4)
7
0
2
Returns: 5
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.
【题目链接】:
【题解】
让你猜这个人最多能得多少分.
其实答案就是min(questions-guess,question-actual)+min(guess,actual);
就是尽量让这个人的答案和结果一样。
【完整代码】
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <string>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
//const int MAXN = x;
const int dx[5] = {0,1,-1,0,0};
const int dy[5] = {0,0,0,-1,1};
const double pi = acos(-1.0);
class TestTaking
{
public:
int findMax(int questions, int guessed, int actual)
{
int a1 = min(guessed,actual);
int a2 = min(questions-guessed,questions-actual);
return a1+a2;
}
};
//提交时以下部分删去.
int main()
{
//freopen("F:\\rush.txt","r",stdin);
TestTaking A;
int a,b,c;
cin >> a>>b>>c;
cout <<A. findMax(a,b,c);
return 0;
}