1. 程式人生 > >ACM複習(48)11154 LRC才不會告訴你們的事情

ACM複習(48)11154 LRC才不會告訴你們的事情

Description
作為一個ACMer,可能很多時候要熬夜。但是,熬夜不是必須的,倒不如第二天早點起來奮鬥,而且這樣在效率上有明顯的提高。
笨蛋LRC就是不明白這個道理,所以LRC的學習成績越來越差。
對於每一天的課程,LRC都有一個價值評價。現在給你n天裡LRC的課程的課程價值,以及LRC這n天的熬夜情況。
如果第i天之前LRC連續熬夜了t個晚上(即從第i-t天熬夜到i-1天),那麼,第i天的課程價值LRC只能獲得1/(t+1)。也就是說,如果某天LRC沒有熬夜,那第二天,
他獲得的課程價值將是當天的1/(0+1)=100%噢!!另外當t大於等於7時,即LRC已經連續熬夜大於一週後,就會因為太困了以至於完全不能聽課,
所以就不能獲得那天的課程價值了。
(可以假設這n天之前的日子沒有熬夜)
如果在這n天裡面,LRC獲得的課程價值少於總課程價值的50%,那麼,LRC這學期就掛科了。

如果LRC掛科了,那現在你有能力改變LRC的命運,你可以改變這n天裡面某一天LRC的熬夜情況(可以不改變),問有沒有一個方法讓LRC能不掛科。

================我是分割線================

最後在這裡告誡今年的12級新生,熬夜傷身,而且會影響第二天上課的精神,如果情況可以,儘量早點睡覺,第二天早點起來再奮鬥~
目測還有很多孩子為了比賽不吃飯的,這些都是不好的習慣啊,飯是要吃的,覺也是要準時睡的,沒有強壯的體質何來拿起你的程式碼寶劍奮戰呢?

(出題人LRC)

輸入格式
第一行輸入一個正整數n(n<=100)。
第二行輸入n個浮點數p(p>0),表示這n天的課程價值。
第三行輸入一個長度為n的串,其中只包括‘1’和‘0’,其中‘1’表示那一天熬夜,‘0’表示那一天沒有熬夜。

輸出格式
輸出一行,如果能夠讓LRC不掛科,那就輸出“0>_<0!”(不包含引號)。
如果不能,就輸出“POOR LRC!”(不包含引號)。

輸入樣例
7
1 2 3 4.5 5.5 6 7
1111111

輸出樣例
0>_<0!

解題思路

爆破,每一個1都轉化為0試試

#include<stdio.h>
int check(int n, double total, char *str, double *score);
int main()
{
    int n, flag = 0;
    double total = 0, num, score[101
]; char str[101]; scanf("%d", &n); for(int i = 0; i < n; i ++) { scanf("%lf", &score[i]); total += score[i]; } scanf("%s", &str); for(int i = 0; i < n; i ++) { if(str[i] == '1') { str[i] = '0'; if(check(n, total, str, score)) { flag = 1; break; } str[i] = '1'; } } printf("%s\n", flag ? "0>_<0!" : "POOR LRC!"); return 0; } int check(int n, double total, char *str, double *score) { int count = 0; double get = 0; for(int i = 0; i < n; i ++) { get += score[i] / (count + 1); if(str[i] == '1') count += 1; else count = 0; } return get * 2 - total > 0.000001 ? 1 : 0; }