洛谷P1051【誰拿了最多獎學金】

在我的博客食用效果更佳!https://www.cbw2007.tk/articles/luogu-P1051-sol/,文章最初發表於2018年5月28日。更多見在不同的網站瀏覽本站內容

原題鏈接: P1051 誰拿了最多獎學金 - 洛谷 | 計算機科學教育新生態

這題雖然是NOIP2005提高組t1,不過難度甚至連 普及- 都不到。此題根本無需STL排序,不知爲各位爲何大佬都寫這麼多,我這位蒟蒻的代碼只有30多行。

此題只需讀一個數據處理一個即可,既省時間,又省內存。代碼如下:

#include<iostream>//頭文件
#include<cstring>
using namespace std;
int main()
{
    int n,maxn=0,ans=0;//maxn爲最大獎學金的總數,ans是所有人獎學金的總數
    char s[25];//獲得最多獎學金的人的姓名
    cin>>n;
    for (int i=1; i<=n; i++)
    {
        char name[25],tf_s,tf_x;//name姓名,tf_s學生幹部,tf_x西部省份學生
        int score_p,score_c,l,money=0;//score_p期末平均成績,score_c班級評議成績,money學生獎學金的數量
        cin>>name>>score_p>>score_c>>tf_s>>tf_x>>l;
        if (score_p>80&&l>=1)//期末平均成績高於80分
            money+=8000;
        if (score_p>85&&score_c>80)//期末平均成績高於85分,班級評議成績高於80分
            money+=4000;
        if (score_p>90)//期末平均成績高於90分
            money+=2000;
        if (score_p>85&&tf_x=='Y')//期末平均成績高於85分的西部省份學生
            money+=1000;
        if (score_c>80&&tf_s=='Y')//班級評議成績高於80分的學生幹部
            money+=850;
        ans+=money;//總錢數累加
        if (money>max)//如果獎學金最多
        {
            max=money;//最多獎學金數量爲當前獎學金
            strcpy(s,name);//複製名字
        }
    }
    cout<<s<<endl<<max<<endl<<ans;//輸出
    return 0;
}

目測別人的時間複雜度:O(nlog2n)O(n log_2 n)(因爲快排) 我的:O(n)O(n)

目測別人的輔助空間:O(n)O(n) 我的:O(1)O(1)

因爲本人還是個新手OIer,發表的題解還有許多不足之處,如果有人指出,本人將虛心接受。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章