zoukankan      html  css  js  c++  java
  • Codeforces Round #447(Div. 2)

    A题:签到题,问你一个字符串中存在多少QAQ,数据量不大,暴力就可以。

    AC代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main()
    {
    string str;
    cin>>str;
    int len=str.size();
    int ans=0;
    for(int i=0;i<len;i++){
    for(int j=i+1;j<len;j++){
    for(int k=j+1;k<len;k++){
    if(str[i]=='Q'&&str[j]=='A'&&str[k]=='Q')ans++;
    }
    }
    }
        cout << ans<< endl;
        return 0;
    }

    B题:给你n,m,k。题意是,给你一个n×m的矩阵,让你怎样构造矩阵,使得这个矩阵的每一行每一列的乘积都为k。

    首先是不合法的情况,当n和m相加为奇数的时候,并且k为-1,这个举点例子就可以推出来。

    然后是合法的情况,对于一个n×m的矩阵,我们可以随意安排(n-1)×(m-1)内矩阵的点,最后的时候,用最后一行和最后一列调一下就肯定能调出来正确结果。所以最终的答案是:2的(n-1)方的(m-1)次方。

    AC代码:

    #include<bits/stdc++.h>
    #include<string>
    #include<cstring>
    #include<stdio.h>
    using namespace std;
    # define ll long long
    # define inf 0x3f3f3f3f
    const int maxn =1000;
    # define mod 1000000007
    ll quickpow(ll t1,ll t2){
    if(t2==0)return 1;
    t2--;
    ll ans=t1;
    while(t2){
    if(t2&1)ans=ans*t1%mod;
    t1=t1*t1%mod;
    t2>>=1;
    }
    return ans;
    }
    int main(){
    ll n,m,k;
    cin>>n>>m>>k;
    if((n+m)%2!=0&&k==-1){
    cout<<0<<endl;
    }
    else cout<<quickpow(quickpow(2,n-1),m-1)<<endl;
    return 0;
    }

    C题:给你n和n个数,问你在需要多少个数的前提下,能够出现上述数的任意个相邻数的gcd,如果无法构成就输出-1

    首先判断非法情况,就是在给定的数里面,有的数构成的gcd并没有在数列中出现,这种肯定是不合法的。然后对于合法的,我们可以找到一个数列中的最小的数,然后每一个数的后面都插上这个最小的数,这样的话,对于数列中本来的数,可以让i和j相等的时候得到,然后对于下面的,直接用最小的数给卡住了,然后照样输出就可以了。

    AC代码:

    #include<bits/stdc++.h>
    #include<string>
    #include<cstring>
    #include<stdio.h>
    using namespace std;
    # define ll long long
    # define inf 0x3f3f3f3f
    const int maxn =1000000+100;
    # define mod 1000000007
    int a[maxn];
    int ans[maxn];
    map<int,int>vis;
    int main()
    {
        int n;
        cin>>n;
        int minn=inf;
        for(int i=1; i<=n; i++)
        {
            cin>>a[i];
            vis[a[i]]=1;
            minn=min(minn,a[i]);
        }
        int flag=1;
        for(int i=1; i<=n; i++)
        {
            int temp=a[i];
            for(int j=1; j<=i; j++)
            {
                temp=__gcd(temp,a[j]);
                if(vis[temp]==0)flag=0;
            }
        }
        if(flag==0)cout<<-1<<endl;
        else
        {
            cout<<n*2<<endl;
            for(int i=1; i<=n; i++)
            {
            cout<<a[i]<<" "<<minn<<" ";
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Perl的Open函数
    较详细的介绍JNI
    Java多线程单元测试
    sleep函数的简单原理
    Struts与Servlet的冲突
    Ant学习记录
    JDK转码工具
    Throwable
    Entity Framework系列文章导航
    多核时代 .NET Framework 4 中的并行编程1概述
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262796.html
Copyright © 2011-2022 走看看