程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> NOIP201101&&05題解,noip2011

NOIP201101&&05題解,noip2011

編輯:C++入門知識

NOIP201101&&05題解,noip2011


NOIP200701獎學金 難度級別:A;            運行時間限制:1000ms; 運行空間限制:51200KB; 代碼長度限制:2000000B 試題描述    某小學最近得到了一筆贊助,打算拿出其中一部分為學習成績優秀的前5名學生發獎學金。期末,每個學生都有3門課的成績:語文、數學、英語。    先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,    如果兩個同學總分和語文成績都相同,那麼規定學號小的同學 排在前面,這樣,每個學生的排序是唯一確定的。      任務:先根據輸入的3門課的成績計算總分,然後按上述規則排序,最後按排名順序輸出前五名名學生的學號和總分。    注意,在前5名同學中,每個人的獎學金都不相同,因此,你必須嚴格按上述規則排序。    例如,在某個正確答案中,如果前兩行的輸出數據(每行輸出兩個數:學號、總分) 是:

7279

5279

    這兩行數據的含義是:總分最高的兩個同學的學號依次是7號、5號。

    這兩名同學的總分都是 279 (總分等於輸入的語文、數學、英語三科成績之和) ,

    但學號為7的學生語文成績更高一些。如果你的前兩名的輸出數據是:

5279

7279

    則按輸出錯誤處理,不能得分。

輸入 包含n+1行:  第1行為一個正整數n,表示該校參加評選的學生人數。  第2到n+1行,每行有3個用空格隔開的數字,每個數字都在O到100之間z第1行的3個數 字依次表示學號為j-1的學生的語文、數學、英語的成績。 每個學生的學號按照輸入順序編號為l~n (恰好是輸入數據的行號減1)。 
所給的數據都是正確的,不必檢驗。  輸出 共有5行,每行是兩個用空格隔開的正整數,依次表示前5名學生的學號和總分。  輸入示例 【輸入樣例1】 
6      
90 67 80  
87 66 91    
78 89 91     
88 99 77     
67 89 64       
78 89 98       
【輸入樣例2】
8     
80 89 89     
88 98 78    
90 67 80    
87 66 91     
78 89 91     
88 99 77     
67 89 64     
78 89 98  
  輸出示例 【輸出樣例1】 
6 265
4 264
3 258
2 244
1 237
【輸入樣例1】 
8 265
2 264
6 264
1 258
5 258
其他說明 【限制】50%的數據滿足:各學生的總成績各不相同 100%的數據滿足: 6<=n<=300 

 呵呵,典型暴力,我又一次呵呵的笑了,又用暴力A過了。。

#include<iostream>
using namespace std;
struct data
{
    int x,y,z,sum,id;
};
int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
const int maxn=300;
data a[maxn];
int main()
{
    int n=read();
    for(int i=0;i<n;i++)
    {
        a[i].y=read();
        a[i].x=read();
        a[i].z=read();
        a[i].sum=a[i].x+a[i].y+a[i].z;
        a[i].id=i+1;
    }
    for(int i=0;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(a[i].sum<a[j].sum)
            {
                swap(a[i].id,a[j].id);
                swap(a[i].sum,a[j].sum);
                swap(a[i].x,a[j].x);
                swap(a[i].y,a[j].y);
                swap(a[i].z,a[j].z);
            }
            else if((a[i].sum==a[j].sum) && (a[i].y<a[j].y))
            {
                swap(a[i].id,a[j].id);
                swap(a[i].sum,a[j].sum);
                swap(a[i].x,a[j].x);
                swap(a[i].y,a[j].y);
                swap(a[i].z,a[j].z);
            }
            else if((a[i].sum==a[j].sum) && (a[i].y==a[j].y) && (a[i].id>a[j].id))
            {
                swap(a[i].id,a[j].id);
                swap(a[i].sum,a[j].sum);
                swap(a[i].x,a[j].x);
                swap(a[i].y,a[j].y);
                swap(a[i].z,a[j].z);
            }
        }
    }
    for(int i=0;i<5;i++)cout<<a[i].id<<" "<<a[i].sum<<endl;
    return 0; 
}

NOIP200705統計數字

難度級別:A;            運行時間限制:1000ms; 運行空間限制:51200KB; 代碼長度限制:2000000B 試題描述   某次科研調查時得到了n個自然數,每個數均不超過1500000000(1.5*109)。已知不相同的數不超過10000個,現在需要統計這些自然數各自出現的次數,並按照自然數從小到大的順序輸出統計結果。 輸入 包含n+1行; 第一行是整數n,表示自然數的個數; 第2~n+1每行一個自然數。 輸出 包含m行(m為n個自然數中不相同數的個數),按照自然數從小到大的順序輸出。每行輸出兩個整數,分別是自然數和該數出現的次數,其間用一個空格隔開。 輸入示例 8 2 4 2 4 5 100 2 100 輸出示例 2 3 4 2 5 1 100 2 其他說明 【限制】40%的數據滿足:1<=n<=1000;80%的數據滿足:1<=n<=50000;100%的數據滿足:1<=n<=200000,每個數均不超過1500 000 000(1.5*10^9)

 呵呵,還是暴力,我又笑了。。。又用暴力A過了。。。

#include<iostream>
using namespace std;
int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}int main()
{
    int n=read();
    int a[n];
    for(int i=0;i<n;i++)a[i]=read();
    sort(a,a+n);
    int temp=1;
    for(int i=1;i<n;i++)
    {
        if(a[i]!=a[i-1])
        {
            printf("%d %d\n",a[i-1],temp);
            temp=1;
        }
        else if(a[i]==a[i-1])temp++;
    }
    printf("%d %d",a[n-1],temp);
    return 0;
}

 

 

 

暴力無敵。。。。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved