BUPT2017 wintertraining(15) #5I

题意

输出序列A[1..n]的第n-1阶差分(一个整数)。

题解

观察可知答案就是

\[\sum_{i=0}^{n-1} {(-1)^{i}C_n^{i} A_{n-i}}
\]

需要用大整数。

代码

Java代码

import java.io.*;
import java.math.*;
import java.util.*;
import java.text.*; public class Main{
public static void main(String[] argc){
Scanner cin = new Scanner (new BufferedInputStream(System.in));
int T = cin.nextInt();
while(T>0){
--T;
int n = cin.nextInt();
BigInteger a, t, x;
a = BigInteger.ZERO;
t = BigInteger.ONE;
for (int i = 1; i <= n; ++i){
BigInteger b = BigInteger.ONE;
if (i >= 2){
t = t.multiply(BigInteger.valueOf(n-i+1));
t = t.divide(BigInteger.valueOf(i-1));
}
x = cin.nextBigInteger();
b = b.multiply(t);
b = b.multiply(x);
if (1 == (n - i) % 2) a = a.subtract(b);
else a = a.add(b);
}
System.out.println(a);
}
}
}

C++代码

#include <cstdio>
#include <cstring>
using namespace std;
#define N 3005
#define base 10000
struct Big{
int d[1000];
int k,l;
Big(){l=k=0;}
Big(int d){input(d);}
void input(int n){
memset(d,0,sizeof d);
k=0;
if(n==0) l=1;
else for(l=0;n;n/=base)d[l++]=n%base;
}
void output()const{
if(k&&l&&d[l-1])printf("-");
printf("%d",d[l-1]);
for(int i=l-2;i>=0;i--)printf("%04d",d[i]);
}
bool operator <(const Big &b)const{
int i=l-1,j=b.l-1;
if(i!=j)return i<j;
while(i>=0&&d[i]==b.d[j]){i--;j--;}
return d[i]<b.d[j];
}
Big operator * (const Big &b)const{
Big c;
memset(c.d,0,sizeof c.d);
for(int i=0;i<l;i++)
for(int j=0;j<b.l;j++){
c.d[i+j]+=d[i]*b.d[j];
if(c.d[i+j]>=base){
c.d[i+j+1]+=c.d[i+j]/base;
c.d[i+j]%=base;
}
}
c.l=l+b.l;
if(c.l>1&&!c.d[c.l-1])c.l--;
return c;
}
Big operator * (int b)const{
Big c;
c.input(b);
return *this*c;
}
Big operator / (int b)const{
Big c;
int i,k=0;
c.l=l;
for(i=l-1;i>=0;i--){
c.d[i]=(k+d[i])/b;
k=(k+d[i])%b*base;
}
while(c.l>1&&!c.d[c.l-1])c.l--;
return c;
}
Big operator + (const Big &b)const{
Big c=*this;
int k=0;
for(int i=0;i<b.l||i<l;i++){
if(i<b.l)c.d[i]+=b.d[i];
c.d[i]+=k;
k=0;
if(c.d[i]>=base){
c.d[i]-=base;
k=1;
}
}
if(b.l>l)c.l=b.l;
if(k)c.d[c.l++]=1;
return c;
}
Big operator - (const Big &b)const{
Big c=*this;
for(int i=0;i<b.l;i++){
c.d[i]-=b.d[i];
if(c.d[i]<0){
c.d[i]+=base;
c.d[i+1]--;
}
}
while(c.l>1&&!c.d[c.l-1])c.l--;
return c;
}
}a[N];
int T,n;
void add(Big &a,Big b){
if(a.k^b.k){
if(b<a) a=a-b;
else a=b-a,a.k=b.k;
}else a=a+b;
}
void sub(Big &a,Big b){
if(a.k^b.k) a=a+b;
else if(b<a) a=a-b;
else a=b-a,a.k^=1;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=1,d;i<=n;i++){
scanf("%d",&d);
a[i].input(d);
}
Big c(1);
int k=n%2;
Big ans=a[1];
if(!k)ans.k=1;
for(int i=1;i<n;i++){
c=c*(n-i)/i;
k^=1;
Big t=c*a[i+1];
if(k) add(ans,t);
else sub(ans,t);
}
ans.output();
puts("");
}
}

相关题目 Series 2

【HDU - 4927】Series 1的更多相关文章

  1. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  2. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

  3. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  4. 【HDU 2196】 Computer(树的直径)

    [HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...

  5. 【HDU 2196】 Computer (树形DP)

    [HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...

  6. 【HDU 5145】 NPY and girls(组合+莫队)

    pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...

  7. 【hdu 1043】Eight

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...

  8. 【HDU 3068】 最长回文

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...

  9. 【HDU 4699】 Editor

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...

随机推荐

  1. WinForm 进度条

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. Vue2.0 搭建Vue脚手架(vue-cli)

    介绍 Vue.js是一套构建用户界面的渐进式框架.Vue 只关注视图层,采用自底向上增量开发的设计.Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. 阅读之前需要了解的知 ...

  3. 使用PHPExcel导出数据库表结构及内容

    导出表结构: mysql> desc user ; +----------+--------------+------+-----+---------------------+--------- ...

  4. this is incompatible with sql_mode=only_full_group_by

    mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by - Jim_.NET - 博客园 http://www.c ...

  5. winform启动界面+登录窗口

    需求场景:先展示启动界面,然后打开登录界面,如果登录成功就跳转到主界面 首先在程序的入口路径加载启动界面,使用ShowDialog显示界面, 然后在启动界面中添加定时器,来实现显示一段时间的效果,等到 ...

  6. Linux基础命令和NAT技术

    yum    yellowdog updater,modified是一种用python写的基于rpm的管理工具 用于解决rpm包的依赖性 要安装编译工具 yum install gcc 库函数:静态库 ...

  7. asp.net core认证和授权的初始认识--claim、claimsidentity、claimsprincipal

    Claim表示一个声明单元,它用来组成ClaimsIdentity.ClaimsIdentity表示一个证件,例如身份证,身份证上面的名字表示一个Claim,身份证号也表示一个Claim,所有这些Cl ...

  8. mysql sql执行计划

    查看Mysql执行计划 使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show pro ...

  9. vue图片被加了盗链

    https://www.cnblogs.com/dongcanliang/archive/2017/04/01/6655061.html <meta name="referrer&qu ...

  10. MyCat数据库中间件 - 分库

    MyCat MyCat用于解耦分布式数据库与java,比如分库分表以后,需要查询某条数据时,需要java根据需要查的数据先计算去哪个库查,然而有了Mycat就不用自己计算怎么存储,怎么查询了.MyCa ...