牛客国庆集训赛day2

比赛地址
A 约瑟夫环

#include<iostream>

using namespace std;

int main()
{
    int n,m;
    while(cin>>n>>m,n!=0){
        int s=0;
        for (int i = 2; i <= n; i++)s = (s + m) % i;
        cout<<s+1<<endl;
    }
    return 0;
}

C 思维递推

#include<iostream>
#include<cstring>

using namespace std;

typedef long long ll;
const int N=100;
ll F[N];


int main()
{
    int n,kase=0;
    F[1]=F[2]=0,F[3]=1,F[4]=F[5]=2;
    for(int i=6;i<=76;i++)F[i]=F[i-2]+F[i-3];
    while(~scanf("%d",&n)&&n){
        printf("Case #%d: ",++kase);
        printf("%lld\n",F[n-1]+F[n]);
    }
    return 0;
}

E 矩阵乘法

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

typedef long long ll;
const int N=22;
ll a[N][N],b[N][N],t[N][N];

int main()
{
    int m1,n1,m2,n2,kase=0;
    while(~scanf("%d%d%d%d",&m1,&n1,&m2,&n2)){
        if(m1==0)break;
        printf("Case #%d:\n",++kase);
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(t,0,sizeof(t));
        for(int i=0;i<m1;i++){
            for(int j=0;j<n1;j++)scanf("%lld",&a[i][j]);
        }
        for(int i=0;i<m2;i++){
            for(int j=0;j<n2;j++)scanf("%lld",&b[i][j]);
        }
        if(n1!=m2){
            printf("undefined\n");
            continue;
        }
        for(int i=0;i<m1;i++){
            for(int j=0;j<n2;j++){
                for(int k=0;k<n1;k++){
                    t[i][j]+=a[i][k]*b[k][j];
                }
            }
        }
        for(int i=0;i<m1;i++){
            printf("| ");
            for(int j=0;j<n2;j++){
                printf("%lld ",t[i][j]);
            }
            printf("|\n");
        }
    }
    return 0;
}

F 数学规律+大数
规律:(n*(n+1)*(n+2)/6)的平方
ps:碰到这种样例那么有规律然后都能拆成平方的多想想规律
java版本:

import java.util.*;
import java.math.*;
import java.lang.*;

public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int t=in.nextInt();
        while(t>0){
            t--;
            BigInteger n=in.nextBigInteger();
            BigInteger ans;
            ans=n.multiply(n.add(BigInteger.valueOf(1)));
            ans=ans.multiply(n.add(BigInteger.valueOf(2)));
            ans=ans.divide(BigInteger.valueOf(6));
            ans=ans.multiply(ans);
            System.out.println(ans);
        }
    }
}

G 数学
思路:纯数学计算利润

#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
    int n,kase=0;
    while(~scanf("%d",&n)&&n){
        int a,b,c,d;
        double ans=0,cost=0;
        for(int i=1;i<=n;i++){
            scanf("%d%d%d%d",&a,&b,&c,&d);
            cost+=(a*7.5+b*24+c*32)/85+(a+b+c)*1.0/85*8;//总成本=肉成本+香料成本
            ans+=a*0.8+b*1.0+c*1.2+d*0.6;//销售价=肉售价+nasi售价(0.8-0.2)
        }
        printf("Case #%d: RM%.2lf\n",++kase,ans-cost);
    }
    return 0;
}

J 斐波那契+高精度
Java版本:

import java.math.*;
import java.util.*;
import java.lang.*;

public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
            int n=in.nextInt();
            if(n==-1)break;
            BigInteger a=BigInteger.valueOf(0);
            BigInteger b=BigInteger.valueOf(1);
            BigInteger ans=BigInteger.valueOf(0);
            if(n==0){
                System.out.println("Hour: "+n+": 0"+" cow(s) affected");
                continue;
            }
            if(n==1){
                System.out.println("Hour: "+n+": 1"+" cow(s) affected");
                continue;
            }
            for(int i=2;i<=n;i++){
                ans=a.add(b);
                a=b;
                b=ans;
            }
            System.out.println("Hour: "+n+": "+ans+" cow(s) affected");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值