多校第六场 HDU 4927 JAVA大数类+模拟

HDU 4927

题目大意:给定一个长度为n的序列a,每次生成一个新的序列,长度为n-1,新序列b中bi=ai+1ai,直到序列长度为1.输出最后的数。

思路:这题实在是太晕了,比赛的时候搞了四个小时,从T到WA,唉……对算组合还是不太了解啊。如今对组合算比較什么了……

import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner cin=new Scanner (new BufferedInputStream(System.in));
	int t=cin.nextInt();
	while(t-->0)
	{
		int n=cin.nextInt();
		BigInteger ans=BigInteger.ZERO;
		BigInteger mm=BigInteger.ONE;
		for(int i=0;i<n;i++)
		{
			long x = cin.nextLong();
			if(i>0) mm=mm.multiply(BigInteger.valueOf(n-i)).divide(BigInteger.valueOf(i));
			if((i&1)>0) ans=ans.subtract(mm.multiply(BigInteger.valueOf(x)));
			else ans=ans.add(mm.multiply(BigInteger.valueOf(x)));
		}
		if((n&1)==0) ans=ans.negate();
		System.out.println(ans);
	}
    }
}

HDU 4925 模拟

一个隔一个的放肥料得到的苹果就是最多的了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<cmath>
#include<bitset>
#define mem(a,b) memset(a,b,sizeof(a))
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define INF 510010
#define maxn 400010
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int a[101][102];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,m,i,j;
        scanf("%d%d",&n,&m);
        for(i=0; i<n; i++)
            fill(a[i],a[i]+m,1);
        i=0;
        while(i<n)
        {
            for(j=0; j<m; j++)
            {
                if((i&1)&&(j&1)==0) a[i][j]=0;
                if((i&1)==0&&(j&1)) a[i][j]=0;
            }
            i++;
        }
        for(i=0; i<n; i++)
            for(j=0; j<m; j++)
            {
                if(!a[i][j])
                {
                    if(i-1>=0&&a[i-1][j]) a[i-1][j]*=2;
                    if(i+1>=0&&a[i+1][j]) a[i+1][j]*=2;
                    if(j-1>=0&&a[i][j-1]) a[i][j-1]*=2;
                    if(j+1>=0&&a[i][j+1]) a[i][j+1]*=2;
                }
            }
        int sum=0;
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
                if(a[i][j]) sum+=a[i][j];
        printf("%d
",sum);
    }
    return 0;
}


原文地址:https://www.cnblogs.com/gcczhongduan/p/5085567.html