Recently, I suddenly felt in poor state, maybe because of the cold weather?
Questions for the Mudanjiang Division after the competition
[A] 3819 average score -- sign-in question
[B]
[C]
[D]
[E]
[F]
[G]
[H]
[I]
[J]
[K] 3829 known notation -- greedy + Simulation
[A] 3819 average score -- sign-in question
Average score Time Limit: 2 seconds memory limit: 65536 KB
Bob is a freshman in marjar University. He is clever and diligent. However, he is not good at math, especially in mathematical analysis.
After a mid-term exam, Bob was anxious about his grade. He went to the specified sor asking about the result of the exam. The specified sor said:
"Too bad! You made me so disappointed ."
"Hummm... I am giving lessons to two classes. If you were in the other class, the average scores of both classes will increase ."
Now, you are given the scores of all students in the two classes, Except t for the Bob's. please calculate the possible range of Bob's score. all scores shall be integers within [0,100].
Input
There are multiple test cases. The first line of input contains an integerTIndicating the number of test cases. For each test case:
The first line contains two integersN(2 <=N<= 50) andM(1 <=M<= 50) indicating the number of students in Bob's class and the number of students in the other class respectively.
The next line containsN-1 IntegersA1,A2,..,An-1Representing the scores of other students in Bob's class.
The last line containsMIntegersB1,B2,..,BMRepresenting the scores of students in the other class.
Output
For each test case, output two integers representing the minimal possible score and the maximal possible score of Bob.
It is guaranteed that the solution always exists.
Sample Input
24 35 5 54 4 36 55 5 4 5 31 3 2 2 1
Sample output
4 42 4
Question:
Simply and clearly, calculate the average, and then find the upper and lower limits
Analysis:
No analysis
Code:
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;int T, N, M, x;double av1, av2;int main(){ scanf( "%d", &T ); while( T-- ) { scanf( "%d %d", &N, &M ); av1 = 0.0, av2 = 0.0; for( int i = 0; i < N-1; ++i ) { scanf( "%d",&x ); av1 += x; } av1 /= (N-1); for( int i = 0; i < M; ++i ) { scanf( "%d",&x ); av2 += x; } av2 /= M; double minn = ceil(av2); if( minn == av2 ) minn++; double maxx = floor(av1); if( maxx == av1 ) maxx--; printf( "%.0f %.0f\n", minn, maxx ); } return 0; }
Code Jun
[K] 3829 known notation -- greedy + Simulation
Known notation Time Limit: 2 seconds memory limit: 65536 KB
Do you know reverse Polish notation (RPN )? It is a known notation in the area of mathematics and computer science. it is also known as Postfix notation since every operator in an expression follows all of its operands. bob is a student in marjar University. he is learning RPN recent days.
To clarify the syntax of RPN for those who haven't learned it before, we will offer some examples here. for instance, to add 3 and 4, one wocould write "3 4 +" rather than "3 + 4 ". if there are multiple operations, the operator is given immediately after its second operand. the arithmetic expression written "3-4 + 5" in conventional notation wocould be written "3 4-5 +" in RPN: 4 is first subtracted from 3, and then 5 added to it. another infix expression "5 + (1 + 2) × 4)-3" can be written down like this in RPN: "5 1 2 + 4 × + 3 -". an advantage of RPN is that it obviates the need for parentheses that are required by infix.
In this problem, we will use the asterisk "*" as the only operator and digits from "1" to "9" (without "0") as components of operands.
You are given an expression in reverse Polish notation. unfortunately, all space characters are missing. that means the expression are concatenated into several long numeric sequence which are separated by asterisks. so you cannot distinguish the numbers from the given string.
You task is to check whether the given string can represent a valid RPN expression. if the given string cannot represent any valid RPN, please find out the minimal number of operations to make it valid. there are two types of operation to adjust the given string:
- Insert. you can insert a non-zero digit or an asterisk anywhere. for example, if you insert a "1" at the beginning of "2*3*4", the string becomes "12*3*4 ".
- Swap. you can swap any two characters in the string. for example, if you swap the last two characters of "12*3*4", the string becomes "12*34 *".
The strings "2*3*4" and "12*3*4" cannot represent any valid RPN, but the string "12*34 *" can represent a valid RPN which is "1 2*34 *".
Input
There are multiple test cases. The first line of input contains an integerTIndicating the number of test cases. For each test case:
There is a non-empty string consists of asterisks and non-zero digits. The length of the string will not exceed 1000.
Output
For each test case, output the minimal number of operations to make the given string able to represent a valid RPN.
Sample Input
31*111*234***
Sample output
102
Question:
Provide a suffix expression that may be incomplete. Ask how many operations are required to change it to a valid suffix expression.
There are two operations: insert and swap.
Analysis: I don't know how to construct or how to greedy. After reading other people's questions, I understood my ideas.
Note the following:
1. The number of OP operators cannot be less than the number of numeric num. Otherwise, the operation cannot be completed and the suffix expression is invalid.
2. There is no operator for all numbers. You can regard them as a number and output 0 without any operation.
3. The end cannot be a number; otherwise, it is also an invalid suffix expression.
Specific Practices:
Scan the entire string to count the number of OP and num.
If the number of num is less than or equal to the number of OP, insert op-num + 1 number at the beginning.
Consider that the last digit cannot be a number.
Scan the string again, encounter an invalid '*', and exchange it with the last number.
Code:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int T;char str[1010];int main(){ scanf( "%d\n", &T ); while( T-- ) { gets(str); int len = strlen( str ); int op = 0, num = 0; for( int i = 0; i < len; ++i ) { if( str[i] == ‘*‘ ) op++; else num++; } if( op == 0 ) { puts( "0" ); continue; } int res = 0; int tot = 0; if( num <= op ) { res = op - num + 1; num += res; tot += res; } if( str[len - 1] != ‘*‘ ) { for( int i = 0; i < len; ++i ) { if( str[i] == ‘*‘ ) { swap( str[i], str[len - 1] ); res++; break; } } } for( int i = 0; i < len; ++i ) { if( str[i] == ‘*‘ ) { if( tot < 2 ) { for( int j = len - 1; j >= 0; --j ) { if( str[j] != ‘*‘ ) { swap( str[j], str[i] ); res++; tot++; break; } } } else tot--; } else tot++; } printf( "%d\n", res ); } return 0;}
Code Jun
2014 ACM/ICPC Mudanjiang Division Field Competition