(紀中)2169. 分數統計

(File IO): input:score.in output:score.out
時間限制: 1000 ms 空間限制: 262144 KB 具體限制


題目描述
在統計完朋友情況之後,小明又對大家的畢業學校產生興趣,但是他覺得單純的統計人數是一件非常無聊的事情,於是他設計了一個算法,同一所學校畢業的學生,第11個將獲得11分,第22個獲得22分,第33個獲得44分…,第ii個將獲得2(i1)2^(i-1)分,總分就是這所小學的得分,小明想知道得分最高的學校有多少分。


輸入
輸入文件score.inscore.in的第一行有兩個整數nnmmnn表示總人數,mm表示已知的同校關係數量。
接下來mm行,每行有22個以空格隔開的整數aabb,表示aa和b是來自同一所學校,aabb均爲11nn之間的整數。不會給出重複的信息。

輸出
輸出文件score.out只有一行,爲所有學校中的最高得分。最後得分可能會很大,你只需要輸出後100位即可,不足100位的請直接輸出。


樣例輸入
5 3
1 2
3 4
1 3

樣例輸出
15


數據範圍限制
6060%的數據,1<=n<=101 <= n <= 10
8080%的數據,1<=n<=701 <= n <= 70
100100%的數據,1<=n<=100001<=m<=1000001 <= n <= 10000,1 <= m <= 100000


提示
12341、2、3、4來自同一所學校,該所學校所得的分數爲1+2+4+8=151+2+4+8=15


解題思路
原本抱着AC的心態打這題,結果0分!
改題時一直說我運行時錯誤,足足改了兩小時,最後發現是在函數中少打了一個returnreturn。。。低級錯誤
其實這道題就是先打一個並查集,再算出結果即可。因爲數據較大,所以要使用高精度。


代碼

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,m,a[20010],x,y,xx,yy,fat[20010],ans[20010],l,maxn,k,x1;
int getfather(int z){
    if(fat[z]==0)
	return z;
   return fat[z]=getfather(fat[z]);
}
int main()
{
    freopen("score.in","r",stdin);
    freopen("score.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1; i<=n; i++)
        a[i]=1;
    for(int i=1; i<=m; i++)
    {
        scanf("%d%d",&x,&y);
        xx=getfather(x);
        yy=getfather(y);
        if(xx!=yy)
        {
            fat[xx]=yy;
            a[yy]=a[xx]+a[yy];
            if(a[yy]>maxn)
                maxn=a[yy];
        }
    }
    l=1;
    ans[1]=1;
    for(int i=1; i<=maxn; i++)
    {
        x1=0;
        for(int j=1; j<=l; j++)
        {
            ans[j]=ans[j]*2+x1;
            x1=ans[j]/10;
            ans[j]=ans[j]%10;
        }
        if(x1>0)
        {
            l++;
            ans[l]=x1;
        }
        if(l>100)
           l=100;
    }
    ans[1]=ans[1]-1;
    k=1;
    while(ans[k]<0)
    {
    	ans[k]+=10;
    	ans[k+1]--;
    	k++;
	}
    for(int i=l;i>=1;i--) 
    {
    	if(ans[l]!=0)
    	printf("%d",ans[i]);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章