Leetcodeの第44回隔週コンテスト問題解決

最高高度の
アイデアを見つける:接頭辞を付けて合計し、元のシーケンスを復元してから、最大値を維持します

class Solution {
    
    
public:
    int largestAltitude(vector<int>& gain) {
    
    
        int ma=0,now=0;
        for(auto &x:gain){
    
    
            now+=x;
            ma=max(ma,now);
        }
        return ma;
    }
};

言語を教える必要がある最小人数の
考え方:まず、各人が話すことができる言語を数えます。a[i] [j] = 1は、i番目の人がj番目の言語を話すことができることを意味します。
次に、各言語を列挙し、最小値を維持し、現在の言語を学習した複雑さn ^ 3の
ベクトルで保存します。
新しい学習者の言語は、終了するたびに削除されること注意しください。

class Solution {
    
    
public:
    
    int minimumTeachings(int n, vector<vector<int>>& l, vector<vector<int>>& f) {
    
    
        int ans=505;
        int a[505][505]={
    
    0};
         for(int j=0;j<l.size();j++){
    
    
            for(int k=0;k<l[j].size();k++){
    
    
                    a[j+1][l[j][k]]=1;
            }
        }
        
        for(int i=0;i<=n;i++){
    
    
            vector<int> an;
            for(int j=0;j<f.size();j++){
    
    
                int F=0;
                for(int k=1;k<=n;k++){
    
    
                    if(a[f[j][0]][k] && a[f[j][1]][k]){
    
    
                        F=1;
                        break;
                    }
                }
                if(F==0){
    
    
                    if(a[f[j][0]][i]) a[f[j][1]][i]=1,an.push_back(f[j][1]);
                    else if(a[f[j][1]][i]) a[f[j][0]][i]=1,an.push_back(f[j][0]);
                    else a[f[j][1]][i]=1,a[f[j][0]][i]=1,an.push_back(f[j][1]),an.push_back(f[j][0]);    
                }
            }
            ans=min(ans,(int)an.size());
            for(auto &X:an){
    
    
                a[X][i]=0;
            }
            
        }
        return ans;
    }
};

XORをデコードした後の配置
思考:それは思考の質問です。データに注意してください。nは奇数です。その場合、彼によって与えられたシーケンスの長さは偶数であり、これは明らかにxorの性質に関連しています。
与えられたシーケンスでプレフィックスxorを試してみましょう。
取得できるシーケンスは次のようになります。a
[1] ^ a [2] a [1] ^ a [3] a [1] ^ a [4]…a [1] ^ a [n]
プレフィックスXORをすべてXORします。一度に(nが5であると仮定)
x =
a [1] ^ a [2] ^ a [1] ^ a [3] ^ a [1] ^ a [4] ^ a [1] ^ a [5] =
a [2] ^ a [3] ^ a [4] ^ a [5]

は、a [1]を除く他の数値のxor値と同じです。
nの値がわかっているので、z = 1 ^ 2 ^ 3 ^ 4 ^ 5…^ nを見つけることができます
。a[1]を除くすべての数値が2回表示されるため、x xorzはa [1]の値を取得します。
このように、a [1]とプレフィックスXORシーケンスをxorに入れるだけで、a [2] a [3] ... a [n]の値を取得できます。

class Solution {
    
    
public:
    vector<int> decode(vector<int>& e) {
    
    
        int x=0;
        for(int i=1;i<e.size();i++) e[i]^=e[i-1];
        for(auto &y:e) x^=y;
        int z=0;
        for(int i=1;i<=e.size()+1;i++) z^=i;
        vector<int> ans;
        ans.push_back(z^x);
        for(int i=0;i<e.size();i++) ans.push_back(ans[0]^e[i]);
        return ans;
        
    }
};

製品配列を生成するためのスキーム
数のアイデア:それがボールボックスモデルであることは簡単にわかります。製品は素因数分解を考えるのは簡単です。
したがって、ボックスに入れられた同じ品質係数の場合、ボールは同じですが、ボックスが異なることを意味します。
つまり、パーティション方式で十分です。

分割法の式はC(n + m-1、m-1)です。ここで、nはボールの数、mはボックスの数です。
しかし、この質問nとmは1e4であり、スコープが非常に大きく、スペースが十分ではありませんか?
2 ^ 14> 1e4、つまり、ボールの数は実際には1ダースであることに注意してください。
次に、C(n、m)= C(n、nm)であることがわかります。
したがって、C(n + m-1、m-1)= C(n + m-1、n + m-1-(m-1) )= C(n + m-1、n)
Yang Hui三角形を使用して、組み合わせの数を前処理できます。2番目の次元は13に到達するだけで済みます。

typedef long long ll;
const ll mod=1e9+7;
ll dp[10055][15];
class Solution {
    
    
public:
    vector<int> ans;
    vector<int> waysToFillArray(vector<vector<int>>& q) {
    
    
        dp[0][0]=1;
        for(int i=1;i<10050;i++){
    
    
            dp[i][0]=1;
            for(int j=1;j<14;j++){
    
    
                dp[i][j]=(dp[i-1][j]+dp[i-1][j-1])%mod;
            }
        }

        for(auto &X:q){
    
    
            ll now=1;
            int m=X[0],x=X[1];
            for(int i=2;i*i<=x;i++){
    
    
                if(x%i==0){
    
    
                    int n=0;
                    while(x%i==0) ++n,x/=i;
                    now*=dp[n+m-1][n];//C(n+m-1,m-1)=C(n+m-1,n)
                    now%=mod;
                }
            }
            if(x!=1){
    
    
                now*=dp[1+m-1][1];
                now%=mod;
            }
            ans.push_back(now);
        }
        return ans;
    }
};

おすすめ

転載: blog.csdn.net/qq_43563669/article/details/113093006