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

TC SRM 400 DIV2

編輯:C++入門知識

250PT:從(0,0)出發,出租車的速度是一定的,步行的速度也是固定的,所以最快的肯定是全部步行,或者步行至一個出租車處,然後坐車。
不會坐兩輛出租車的。枚舉所有出租車即可。
[cpp] 
class GrabbingTaxi{ 
public: 
    int minTime(vector <int> tXs, vector <int> tYs, int gX, int gY, int walkTime, int taxiTime){ 
        int ans=(abs(gX)+abs(gY))*walkTime; 
        for(int i=0;i<tXs.size();i++) 
            ans=min(ans,(abs(tXs[i])+abs(tYs[i]))*walkTime+(abs(gX-tXs[i])+abs(gY-tYs[i]))*taxiTime); 
        return ans; 
    } 
}; 

500Pt:形如p^q的如果p為素數,q大於1,稱為XX數。問n是否為XX數,找出p,q。
由於 n有一定的范圍,最多不超過2^60,也就是q是肯定小於60的,便可以枚舉q判斷是否滿足條件
[cpp] 
class StrongPrimePower{ 
public: 
    bool isprime(LL num){ 
        if(num==2) 
            return true; 
        if(!(num&1)) 
            return false; 
        for(int i=3;i<=(int)sqrt(num*1.0)+1;i++) 
            if(num%i==0) 
                return false; 
        return true; 
    } 
    LL Pow(LL  a,int b){ 
        return b==0?1:a*Pow(a,b-1); 
    } 
    vector <int> baseAndExponent(string n){ 
        LL num; 
        sscanf(n.c_str(),"%lld",&num); 
        vector<int>ans; 
        for(int i=2;i<=60;i++){ 
            LL p=(int)(eps+pow(num,1.0/i)); 
            if(Pow(p,i)==num&&isprime(p)){ 
                ans.push_back((int)p); 
                ans.push_back(i); 
                return ans; 
            } 
        } 
        return ans; 
    } 
}; 

1000pt:跪爛的題,開關問題,最多是8*8,其實可以枚舉第一行(2^8),然後再判斷是否滿足即可。我偏來個高斯消元,結果發現有多解,然後就枚舉自由變元,結果第一組數據就越界,猜測是棧溢出????以下的代碼是只能判斷無解和唯一解的。
[cpp] 
int way[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,-1},{-1,1}}; 
class LightedPanels{ 
public: 
    int a[70][70],n,row,col; 
    void debug(){ 
        for(int i=0;i<n;i++){ 
            for(int j=0;j<=n;j++) 
                printf("%d ",a[i][j]); 
            printf("\n"); 
        } 
    } 
    int gauss(){ 
        int i,j; 
        for(i=0,j=0;i<n&&j<n;j++){ 
            int k=i; 
            for(;k<n;k++) 
                if(a[k][j]) 
                    break; 
            if(a[k][j]){ 
                for(int r=0;r<=n;r++) 
                    swap(a[i][r],a[k][r]); 
                for(int r=0;r<n;r++) 
                    if(r!=i&&a[r][j]) 
                        for(k=0;k<=n;k++) 
                            a[r][k]^=a[i][k]; 
                i++; 
            } 
            debug(); 
            cout<<endl; 
        } 
        for(j=i;j<n;j++) 
            if(a[j][n]) 
                return -1; 
        int ans=0; 
        for(int i=0;i<n;i++) 
            if(a[i][n]) 
                ans++; 
        return ans; 
    }   www.2cto.com
    int minTouch(vector <string> board){ 
        row=board.size();col=board[0].size(); 
        n=row*col; 
        memset(a,0,sizeof(a)); 
        for(int i=0;i<row;i++) 
            for(int j=0;j<col;j++){ 
                a[i*col+j][i*col+j]=1; 
                if(board[i][j]=='.') 
                    a[i*col+j][n]=1; 
                for(int k=0;k<8;k++){ 
                    int x=i+way[k][0],y=j+way[k][1]; 
                    if(x>=0&&y>=0&&x<row&&y<col) 
                        a[i*col+j][x*col+y]=1; 
                } 
            } 
        return gauss(); 
    } 
}; 

作者:ACM_cxlove

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