zoukankan      html  css  js  c++  java
  • 江西理工大学南昌校区2016年新生赛

    潘神的排序

    解法:排序(什么为什么错了这么多次QAQ??解法就是排序啊)

    sort(a,a+3)
    cout<<a[1]<<endl;
    

    字符串解压

    解法:字符串处理(处理字符串中的数字就好了,代码给出)

    (当然可以用%d%c来快速处理~)

    注意:如果题目是反过来告诉字符串,让你压缩会怎么办?

            for(i=0;i<k;i++)
            {
                if(a[i]>='0'&&a[i]<='9')
                {
                    c=(a[i]-'0')+c*10;continue;
                }
                else
                {
                    for(j=1;j<=c;j++)
                printf("%c",a[i]);
               c=0;
               }
            }

    lfforu的围巾

    解法:答案不给出,母函数模板(不懂的去查他的模板,大概就是我下面写的那样,注意取模)

            for(int i=0;i<=n;i++)
            {
                a[i]=1;
                b[i]=0;
            }
            for(int i=2;i<=n;i++)
            {
                for(int j=0;j<=n;j++)
                {
                    for(int k=0;k+j<=n;k+=i*i)
                    {
                        b[k+j]+=a[j];
                    }
                }
                for(int z=0;z<=n;z++)
                {
                    a[z] = b[z]%mod;
                    b[z] = 0;
                }
            }
            cout<<a[n]<<endl;
    

      

    不要你离开

    解法:难度我猜不在于算出概率,算概率只有去判断一下就好了

    化简可以用公约数~(暴力求出所有解法也是可以的,如下面的形式)

        if(a>=b)
            max=a;
        else
            max=b;
        if(max==1)
            printf("1/1");
        if(max==2)
            printf("5/6");
        if(max==3)
            printf("2/3");
        if(max==4)
            printf("1/2");
        if(max==5)
            printf("1/3");
        if(max==6)
            printf("1/6");

    屏幕检测

    解法:模拟,如果让你求0011000111000 有多少个连续的1,估计题目有容易的多

    现在变成二维形式,还是一样的解法

    我们加边界,当出现*时,判断左边是否有.,右边是否有*,或者说单独存在这一个*,统计一下

    #include <iostream>
    #include <stdio.h>
    #include <string>
    using namespace std;
    string s[105];
    int main(){
        int n,m;
        for(int i=0;i<=105;i++){
            s[0]+='.';
        }
        while(cin>>n>>m){
            for(int i=1;i<=n;i++){
                cin>>s[i];
                s[i]='.'+s[i]+'.';
            }
            s[n+1]=s[0];
            int cnt1=0,cnt2=0;
            for(int i=1;i<=n;i++){
                for(int k=1;k<=m;k++){
                    if(s[i][k]=='*'){
                        if(s[i-1][k]=='.' && s[i+1][k]=='*'){
                            cnt1++;
                        }
                        if(s[i][k-1]=='.' && s[i][k+1]=='*'){
                            cnt1++;
                        }
                        if(s[i-1][k]=='.' && s[i+1][k]=='.' && s[i][k-1]=='.' && s[i][k+1]=='.'){
                            cnt2++;
                        }
                    }
                }
            }
            cout<<cnt2<<" "<<cnt1<<endl;
        }
    }
    

    袁少的觉醒

    解法:参考http://www.cnblogs.com/yinghualuowu/p/5160313.html

    疯狂的南昌小婊砸

    解法:时间原因不知道怎么去说明白,先略过吧>~<

    贪财的小艾

    解法:一道模拟或者说是LCA。。(防ak题嘛,你懂得)

    用map放每一个节点的对应边的权值,然后进行更新或者查询(具体看题目要求)

    是不是说的有点简单了。

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    
    map<pair<ll,ll>,ll>m;
    
    
    int main()
    {
        int n;
        scanf("%d",&n);
        while(n--)
        {
            ll ty,u,v,w;
            scanf("%I64d",&ty);
            if(ty==1)
            {
                scanf("%I64d%I64d%I64d",&u,&v,&w);
                if(v<u)swap(u,v);
                while(v!=u)
                {
                    if(v>u)
                    {
                        m[{v,v/2}]+=w;
                        m[{v/2,v}]+=w;
                        v/=2;
                    }
                    else if(u>v)
                    {
                        m[{u,u/2}]+=w;
                        m[{u/2,u}]+=w;
                        u/=2;
                    }
                }
            }
            else
            {
                ll sum=0;
                scanf("%I64d%I64d",&u,&v);
                if(v<u)swap(u,v);
                while(v!=u)
                {
                    if(v>u)
                    {
                        sum+=m[{v,v/2}];
                        v/=2;
                    }
                    else if(u>v)
                    {
                        sum+=m[{u,u/2}];
                        u/=2;
                    }
                }
                printf("%I64d
    ",sum);
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    读《ASP.NET Core3框架揭秘》之3&4~依赖注入
    读《ASP.NET Core3框架揭秘》之2~跨平台的奥秘
    读《ASP.NET Core3框架揭秘》之1~全新的开发体验
    C# 获取当前方法/父方法的信息
    Redis——集群(cluster)
    Redis——哨兵(sentinel)
    Redis——主从复制
    Redis——版本升级&数据迁移
    Redis——6.0集群安装部署
    Redis——常用命令
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/6109186.html
Copyright © 2011-2022 走看看