彩票平台:首页 > 学习之路 > ACM||算法ACM||算法

113彩票官网++组

卞振伟2019-02-19【ACM||算法】人已围观

简介蓝桥杯
为促进软件和信息领域专业技术人才培养,提升高校毕业生的就业竞争力,由教育部就业指导中心支持,工业和信息化部人才交流中心举办。

113彩票官网++组

 

题目文字解析在本页底部

 

A:

//2017-08-05
//水题,1000天数据量小,写代码的功夫能算完好几遍
 

B:

#include<iostream>
using namespace std;
bool f(int n){
    while(n){
        if(n%10==4)
            return true;
        n/=10;
    }
    return false;
}
int ans;
int main(){
    int n = 10000;
    int m = 99999;
    for(int i = n; i <= m; ++i){
        if( !f(i) ){
            ans++;
        }
    }
    cout<<ans;
}
 

C:

113彩票
#include<bits/stdc++.h>
using namespace std;
int main(){
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
    do{
        if(a[4]!=0 && a[0]!=0)
            if( (a[0]*1000+a[1]*100+a[2]*10+a[3] + a[4]*1000+a[3]*100+a[5]*10+a[6]) == (a[0]*10000+a[1]*1000+a[5]*100+a[3]*10+a[7]) ){
                for(int i = 0; i < 4; ++i)
                    cout<<a[i];
                return 0;
            }
    }while(next_permutation(a,a+10));
}
 

D:

#include <stdio.h>
#include <string.h>

void StringInGrid(int width, int height, const char* s)
{
    int i,k;
    char buf[1000];
    strcpy(buf, s);
    if(strlen(s)>width-2) buf[width-2]=0;

    printf("+");
    for(i=0;i<width-2;i++) printf("-");
    printf("+\n");

    for(k=1; k<(height-1)/2;k++){
        printf("|");
        for(i=0;i<width-2;i++) printf(" ");
        printf("|\n");
    }

    printf("|");

    printf("%*s%s%*s",(width-2)/2+strlen(buf)/2,buf,"",width-2-((width-2)/2+strlen(buf)/2),"");//填空

    printf("|\n");

    for(k=(height-1)/2+1; k<height-1; k++){
        printf("|");
        for(i=0;i<width-2;i++) printf(" ");
        printf("|\n");
    }

    printf("+");
    for(i=0;i<width-2;i++) printf("-");
    printf("+\n");
}

int main()
{
    StringInGrid(20,6,"abcd1234");
    return 0;
}
 

E:

#include <stdio.h>

void test(int x[])
{
    int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
    int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];

    if(a*3==b) printf("%d / %d\n", a, b);
}

void f(int x[], int k)
{
    int i,t;
    if(k>=9){
        test(x);
        return;
    }

    for(i=k; i<9; i++){
        {t=x[k]; x[k]=x[i]; x[i]=t;}
        f(x,k+1);
        {t=x[k]; x[k]=x[i]; x[i]=t;} // 填空处
    }
}

int main()
{
    int x[] = {1,2,3,4,5,6,7,8,9};
    f(x,0);
    return 0;
}
 

F:

#include<bits/stdc++.h>
using namespace std;
int main(){
    for(int i = 2; i < 30; ++i)
    for(int j = 2; j < 31; ++j)
        if(1225 + i*(i+1) + j*(j+1) - 2*(i+j+1) == 2015 && i != 10){
            cout<<min(i,j);
            return 0;
        }
}
 

G:

//DFS
#include<bits/stdc++.h>
using namespace std;
int ans;
void dfs(int n, int kinds){
    if(n > 13 || kinds > 13)
        return;
    if(n == 13){
        ans++;
        return;
    }
    for(int i = 0; i <= 4; ++i){
        dfs(n+i, kinds+1);
    }
}
int main(){
    dfs(0, 0);
    cout<<ans;
}

//动态规划
#include<bits/stdc++.h>
using namespace std;
int dp[14][14];
int main(){
    dp[0][0] = 1;
    for(int i = 1; i < 14; ++i)//牌型种类
        for(int j = 0; j < 14; ++j)//当前卡牌数
            for(int k = 0; k < 5; ++k)//第i种牌型卡牌数
                if(j + k <= 13)
                    dp[i][j+k] += dp[i-1][j];
    cout<<dp[13][13];
}

 

H:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int w, m, n, y1, y2, x1, x2;
    cin>>w>>m>>n;
    x1 = (m+w-1)/w;
    x2 = (n+w-1)/w;
    if(x1&1)    //x1&1 等价于 x1%2==1
        y1 = m%w;
    else
        y1 = w+1-m%w;
    if(x2&1)
        y2 = n%w;
    else
        y2 = w+1-n%w;
    cout<<abs(x1-x2)+abs(y1-y2)<<endl;
    return 0;
}
 

I:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;

ll Mod=1e9+7;
const int maxn=6, maxm=6;
int n,m;

struct Matrix{  //矩阵
    int n,m;
    ll a[maxn][maxm];
    void clear(){
        n=m=0;
        memset(a,0,sizeof(a));
    }
    void set(int num, int t){
        n=m=t;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                a[i][j]=num;

    }
    Matrix operator *(const Matrix &b) const{
        Matrix tmp;
        tmp.clear();
        tmp.n=n;tmp.m=b.m;
        for(int i=0;i<n;i++)
            for(int j=0;j<b.m;j++)
                for(int k=0;k<m;k++)
                    tmp.a[i][j]+=(a[i][k]%Mod)*(b.a[k][j]%Mod);
        return tmp;
    }
};

Matrix s, ans;

void Pow(int m){    //快速幂
    while(m){
        if(m&1)
            ans=ans*s;
        s=s*s;
        m>>=1;
    }
}

int main()
{
    cin>>n>>m;

    s.clear();
    s.n = s.m = maxn;
    s.set(1,maxn);

    ans.clear();
    ans.n = ans.m = maxn;
    for(int i = 0; i < maxn; ++i)
        ans.a[i][i]= 1;

    for(int i = 0; i < m; ++i){
        int p, q;
        cin >> p >> q;
        s.a[p - 1][(q + 2) % 6] = 0;
        s.a[q - 1][(p + 2) % 6] = 0;
    }

    Pow(n-1);

    ll cot = 0;
    for(int i = 0; i < maxn; ++i){
        for(int j = 0; j < maxn; ++j){
            cot += ans.a[i][j];
            cot %= Mod;
        }
    }

    ll p = 4;
    while(n){   //快速幂  此处数据较大需要取模
        if(n&1){
            cot *= p;
            cot %= Mod;
        }
        p *= p;
        p %= Mod;
        n >>= 1;
    }
    cout<<cot<<endl;
    return 0;
}
 

J:

#include<bits/stdc++.h>
#include<string.h>
using namespace std;
const int maxn = 1e5+5;
vector<int> node[maxn];
int val[maxn], vis[maxn], dp[maxn][2], n, ans;//val分数   vis标记   dp该情况下最大分数

void init(){
    cin>>n;
    for(int i = 1; i <= n; ++i)
        cin>>val[i];
    for(int i = 0; i < n-1; ++i){
        int p,q;
        cin>>p>>q;
        node[p].push_back(q);
        node[q].push_back(p);
    }
}

void dfs(int vertex){
    dp[vertex][0] = 0;          //不取该结点
    dp[vertex][1] = val[vertex];//取该节点
    vis[vertex] = 1;
    for(int i = 0; i < node[vertex].size(); ++i){
        if( !vis[ node[vertex][i] ] ){
            dfs(node[vertex][i]);
            dp[vertex][1] += max(dp[node[vertex][i]][0], dp[node[vertex][i]][1]);
        }else{
            dp[vertex][0] = max(dp[vertex][0], 0);
            dp[vertex][1] = max(dp[vertex][1], val[vertex]);
        }
    }
}

int main(){
    init();
    dfs(1);
    ans = -1;
    for(int i = 1 ; i <= n; i++){   //取最大值
        ans = max(ans,dp[i][1]);
        ans = max(ans,dp[i][0]);
    }
    cout<<ans;
}
 

题目文字解析



Tags:编程   程序员   C|C++

很赞哦! ()

文章评论

站点信息

  • 建站时间:2018-11-25
  • 网站程序:帝国CMS7.5
  • 文章统计:71篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 网站地图XML网站地图
  • 微信公众号:扫描二维码,关注我的公众号
  • GitHub:扫描二维码,关注我的GitHub

客服在线

QQ客服

客服微信扫码

服务时间

周一至周日 9:00-21:00