Codeforces Round #447 (Div. 2) B,C

B Ralph And His Magic Field

題意&分析:
一個n*m的矩陣,如果每一行或者每一列的所有元素乘積(produce)等於k(k=-1 or 1),那麼輸出所有可能的種類;如果不存在則輸出 0 。
當m和n同奇偶的時候,只需要考慮最後一行和最後一列,因爲(n-1)*(m-1)的矩陣無論是什麼樣子的都可以通過最後一行一列調整是乘積滿足 k ;但是m、n一奇一偶並且 k = 1 的時候,可以判斷出偶數個 -1 相乘得到的是 1 ,不滿足。

還有就是計算快速冪的問題,pow(2,(n-1)*(m-1))太大了,所以可以拆分成兩次快速冪,或者指數%(mod-1)。

代碼如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll Mod = 1e9 + 7;

ll n,m,k;

ll pow_mod(ll x,ll n,ll mod){
    ll res = 1;
    while(n > 0){
        if(n & 1)res = res * x % mod;
        x = x * x % mod;
        n >>= 1;
    }
    return res;
}
int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);

    while(scanf("%lld%lld%lld",&n,&m,&k) != EOF){
        if(k == -1 && (m+n)%2 == 1){//遞推歸納到一行或者一列的格式,偶數個 -1 相乘是正數
            printf("0\n");
            continue;
        }
        ll ans = pow_mod(pow_mod(2,m-1,Mod),(n-1),Mod);
        //ll tmp=fast_mod(2,((n-1)%(MOD-1))*((m-1)%(MOD-1)),Mod);//費馬小定理,降冪
        printf("%lld\n",ans);
    }
    return 0;
}

C - Marco and GCD Sequence

題意&分析:
對於1000個數的數列,每個數不超過1e6,構造一個元素不超過4000的數列,使得對於新數列,任意區間[i,j](1<=i<=j<=n)內的數求GCD都出現在這1000個數中。

所以所有數字的gcd必須是最小的那個元素,否則所有元素[st,ed]這個區間就不滿足了。若滿足上述條件,則在每一個元素之間插入這個最小的數(即a[ 0 ]),這樣子總數是2*n個,小於4000。

代碼如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll Mod = 1e9 + 7;

int n;
int a[1010];

ll gcd(ll a,ll b){
    return b==0? a:gcd(b,a%b);
}
int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);

    while(scanf("%d",&n) != EOF){
        memset(a,0,sizeof(a));
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        bool ok = false;
        for(int i=1;i<n;i++){
            if(a[0] != gcd(a[0],a[i])){
                ok = true;
                break;
            }
        }
        if(ok){
            printf("-1\n");
        }
        else{
            printf("%d\n",2*n);
            for(int i=0;i<n;i++){
                printf("%d %d",a[i],a[0]);
                printf("%c",(i==n-1)?'\n':' ');  
            }
        }
    }
    return 0;
}
發佈了110 篇原創文章 · 獲贊 30 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章