Problem A A. Jzzhu and Children time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output There are n children in Jzzhu's school. Jzzhu is going to give some candies to them. Let's number
Problem A
A. Jzzhu and Children
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
There are n children in Jzzhu's school. Jzzhu is going to give some candies to them. Let's number all the children from 1 to n. The i-th child wants to get at least ai candies.
Jzzhu asks children to line up. Initially, the i-th child stands at the i-th place of the line. Then Jzzhu start distribution of the candies. He follows the algorithm:
Consider all the children in the order they go home. Jzzhu wants to know, which child will be the last in this order?
Input
The first line contains two integers n,?m (1?≤?n?≤?100; 1?≤?m?≤?100). The second line contains n integers a1,?a2,?...,?an (1?≤?ai?≤?100).
Output
Output a single integer, representing the number of the last child.
Sample test(s)
input
5 2 1 3 1 4 2
output
4
input
6 4 1 1 2 2 3 3
output
6
傳送門:點擊打開鏈接
解體思路:簡單模擬題,用隊列模擬這個過程即可。
代碼:
#include#include using namespace std; typedef pair P; queue q; int main() { #ifndef ONLINE_JUDGE freopen("257Ain.txt", "r", stdin); #endif int n, m, ans = 0; scanf("%d%d", &n, &m); for(int i = 0; i < n; i++) { int x; scanf("%d", &x); q.push(P(x, i + 1)); } while(!q.empty()) { P p = q.front(); q.pop(); if(p.first > m) { p.first -= m; q.push(p); } ans = p.second; } printf("%d\n", ans); return 0; }
B. Jzzhu and Sequences
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Jzzhu has invented a kind of sequences, they meet the following property:
You are given x and y, please calculate fn modulo 1000000007 (109?+?7).
Input
The first line contains two integers x and y (|x|,?|y|?≤?109). The second line contains a single integer n (1?≤?n?≤?2·109).
Output
Output a single integer representing fn modulo 1000000007 (109?+?7).
Sample test(s)
input
2 3 3
output
1
input
0 -1 2
output
1000000006
傳送門:點擊打開鏈接
解體思路:簡單數學公式的推導,
f(n) = f(n-1) + f(n+1), f(n+1) = f(n) + f(n+2);
兩式相加得:f(n-1) + f(n+2) = 0,
由上式可推得:f(n+2) + f(n+5) = 0;
由上兩式得:f(n-1) = f(n+5),所以f(n)的周期為6;
我們只需求出f的前六項即可,ps:注意一點,f(n)可能為負值,對負數取模要先對負數加mod,使負數變為正數之后再取模。
代碼:
#includeconst int mod = 1000000007; int main() { #ifndef ONLINE_JUDGE //freopen("257Bin.txt", "r", stdin); #endif int n, a [7]; scanf("%d%d%d", &a[0], &a[1], &n); for(int i = 2; i < 7; i++) a[i] = a[i - 1] - a[i - 2]; int t = a[(n - 1)% 6]; printf("%d\n", t >= 0 ? t % mod : (t + 2 * mod) % mod); return 0; }
C. Jzzhu and Chocolate
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Jzzhu has a big rectangular chocolate bar that consists of n?×?m unit squares. He wants to cut this bar exactly k times. Each cut must meet the following requirements:
The picture below shows a possible way to cut a 5?×?6 chocolate for 5 times.
Imagine Jzzhu have made k cuts and the big chocolate is splitted into several pieces. Consider the smallest (by area) piece of the chocolate, Jzzhu wants this piece to be as large as possible. What is the maximum possible area of smallest piece he can get with exactly k cuts? The area of a chocolate piece is the number of unit squares in it.
Input
A single line contains three integers n,?m,?k (1?≤?n,?m?≤?109; 1?≤?k?≤?2·109).
Output
Output a single integer representing the answer. If it is impossible to cut the big chocolate k times, print -1.
Sample test(s)
input
3 4 1
output
6
input
6 4 2
output
8
input
2 3 4
output
-1
解體思路:
n行m列,在水平方向最多切n-1刀,豎直方向最多切m-1刀,如果k>n+m-2,就是不能切割的情況;我們找出沿水平方向或豎直方向可以切的最多的刀數mx,如果k>mx,我們就現在這個方向切mx刀,剩下的就是要將一條長為(mn+1)巧克力切(k - mx)刀;其他的情況就是要么就是沿著水平方向切k刀,要么就是沿著豎直方向切k刀,取兩者間的大者。
代碼:
#include#include #include using namespace std; int main() { int n, m, k; long long ans = -1; cin >> n >> m >> k; if(k > n + m -2) ans = -1; else { int mx = max(n - 1, m - 1); int mn = min(n - 1, m - 1); if(k > mx) ans = (mn + 1) / (k - mx + 1); else ans = max(1ll * n / (k + 1) * m, 1ll * m / (k + 1) * n); } cout << ans << endl; return 0; }
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com