欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

2020hdu多校10

程序员文章站 2022-08-19 17:02:00
hdu6879题目分8和3互质可以表示任意 大于 A*B-A-B(13)的数构造#include using namespace std;typedef long long ll;void init(){}void solve(){ int S; int r,c; cin>>S; if(S<=24) { r=S+1; c=1; co...

hdu6879
题目
分8和3互质可以表示任意 大于 A*B-A-B(13)的数
构造

#include <bits/stdc++.h>
using namespace std;
typedef long long  ll;

void init()
{

}
void solve()
{
    int S;
    int r,c;
    cin>>S;
    if(S<=24)
    {
        r=S+1;
        c=1;
        cout<<r<<" "<<c<<endl;
        for(int i=1;i<=r;i++)
        {
            if(i%2==0)
            {
                cout<<"."<<endl;
            }
            else
            {
                cout<<"X"<<endl;
            }
        }
    }
    else
    {
        r=25;
        c=25;
        cout<<r<<" "<<c<<endl;
        int one=S/8;
        int two=(S%8)/3;
        int yv=(S%8)%3;
        one-=yv;
        two+=yv*3;
        for(int i=1;i<=24;i++)
        {
            for(int j=1;j<=25;j++)
            {
                if(i%2==1||j%2==1)
                    cout<<".";
                else if(one>0)
                {
                    cout<<"X";
                    one--;
                }
                else
                    cout<<".";
            }
            cout<<endl;
        }
        for(int i=1;i<=25;i++)
        {
            if(two>0)
            {
                cout<<"X";
                two--;
            }
            else
                cout<<".";
        }
        cout<<endl;
    }

}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int _=1;
    cin>>_;
    while(_--)
    {
        init();
        solve();
    }
    return 0;
}

hdu6887
题目

#include <bits/stdc++.h>

using namespace std;
struct node
{
    int res,index;
    operator < (const node &B)const{
        if(res!=B.res)
            return res>B.res;
        else
            return index<B.index;
    }
};
node no[105];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int T;
    cin>>T;
    while(T--)
    {
        int n,m,k;
        cin>>n>>m>>k;
        for(int i=1;i<=n;i++)
        {
            cin>>no[i].res;
            no[i].index=i;
        }
        if(k==0)
        {
            for(int i=1;i<=n;i++)
            {
                cout<<i;
                if(i!=n)
                    cout<<" ";
            }
                
            cout<<"\n";
        }
        else
        {
            sort(no+1,no+1+n);
            for(int i=1;i<=n;i++)
            {
                cout<<no[i].index;
                if(i!=n)
                    cout<<" ";
            }
                
            cout<<"\n";
        }
    }
    return 0;
}

hdu6880
题目
给你0 1 序列 0 表示 前一位比后一位小 1 表示前一位比后一位大
对于 1 0 来说
第一位的值 大于 第二位的值 则 2 1 (1在2右边) 他们的下标就表示他们的值 目前只有一种情况 第三位小于第二位 则 3 在2右边 两种情况 2 1 3 2 3 1
对于1 0 0 1 第四位大 2 1 3 4() 2 3 4 1 2 3 1 4 第五位 小
2 1 3 4(4) 2 3 4 1(3) 2 3 1 4(4) 和为11
明显的状态题 dp
dp[i][j] 表示 目前出现了i个数字 最后出现的数字在第 j位 排列的个数
后一位大 则为0
对于目前的dp[i][j]来说 dp[i+1][j+1—i+1] +=dp[i][j];
1
dp[i+1][1—j]+=dp[i][j];

#include <bits/stdc++.h>
using namespace std;
typedef long long  ll;
const int maxn=5e3+5;
const int mod=1e9+7;
int dp[maxn];
int a[maxn];
int qian[maxn];
void init()
{

}
void solve()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        dp[i]=0,qian[i]=1;
    dp[1]=1;
    qian[0]=0;
    for(int i=1;i<n;i++)
        cin>>a[i];
    for(int i=1;i<n;i++)
    {
        if(a[i])
        {
            for(int j=1;j<=i;j++)
            {
                dp[j]=(qian[i]-qian[j-1]+mod)%mod;
            }
        }
        else
        {
            for(int j=1;j<=i+1;j++)
            {
                dp[j]=qian[j-1];
            }
        }
        for(int j=1;j<=i+1;j++)
        {
            qian[j]=(qian[j-1]+dp[j])%mod;
        }
    }
    cout<<qian[n]<<endl;
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int _=1;
    cin>>_;
    while(_--)
    {
        init();
        solve();
    }
    return 0;
}

本文地址:https://blog.csdn.net/qq_43364986/article/details/108782639

相关标签: 2020hdu多校