【数论】FOJ 2238 Daxia & Wzc's problem
2016-08-18 14:25
381 查看
题目链接:
http://acm.fzu.edu.cn/problem.php?pid=2238
题目大意:
已知等差数列A(0)的首项a和公差d,求出数列A(0)前n项和,得到新数列A(1);以此类推,最终求A(m)的第i项mod1000000007
题目思路:
【动态规划】
不难推出c[i][j]=c[i-1][j]+c[i][j-1]
但是i太大不能直接递推,m<=1000不能矩阵快速幂。
通过推导可以求出c[i][j]=a*Cn-1n+m-1+d*Cn-2n+m-1
求模时除改为乘逆元(amod-2)
//
//by coolxxx
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<map>
#include<memory.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<stdbool.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define mem(a,b) memset(a,b,sizeof(a))
#define eps (1e-8)
#define J 10
#define mod 1000000007
#define MAX 0x7f7f7f7f
#define PI 3.14159265358979323
#define N 100004
using namespace std;
typedef long long LL;
int cas,cass;
int n,m,lll,ans;
struct xxx
{
LL a,b;
}c
;
bool cmp(xxx aa,xxx bb)
{
if(aa.a!=bb.a)return aa.a<bb.a;
return aa.b<bb.b;
}
void work(int x)
{
int l=1,r=n,mid;
LL y1,y2;
c[0].a=0;c[0].b=-1000000001*1000000001;
while(l<r)
{
mid=(l+r)>>1;
y1=c[mid-1].a*x+c[mid-1].b;
y2=c[mid].a*x+c[mid].b;
if(y1<=y2)l=mid+1;
else r=mid;
}
y1=c[r-1].a*x+c[r-1].b;
y2=c[r].a*x+c[r].b;
printf("%I64d\n",max(y1,y2));
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,x;
// for(scanf("%d",&cas);cas;cas--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
while(~scanf("%d",&n))
// while(~scanf("%d",&n))
{
scanf("%d",&m);
for(i=1;i<=n;i++)
scanf("%I64d%I64d",&c[i].a,&c[i].b);
sort(c+1,c+1+n,cmp);
for(i=1;i<n;i++)
if(c[i].a==c[i+1].a)c[i].a=1000000001;
sort(c+1,c+1+n,cmp);
while(c
.a==1000000001)n--;
for(i=1;i<=m;i++)
{
scanf("%d",&x);
work(x);
}
}
return 0;
}
/*
//
//
*/
http://acm.fzu.edu.cn/problem.php?pid=2238
题目大意:
已知等差数列A(0)的首项a和公差d,求出数列A(0)前n项和,得到新数列A(1);以此类推,最终求A(m)的第i项mod1000000007
题目思路:
【动态规划】
不难推出c[i][j]=c[i-1][j]+c[i][j-1]
但是i太大不能直接递推,m<=1000不能矩阵快速幂。
通过推导可以求出c[i][j]=a*Cn-1n+m-1+d*Cn-2n+m-1
求模时除改为乘逆元(amod-2)
//
//by coolxxx
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<map>
#include<memory.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<stdbool.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define mem(a,b) memset(a,b,sizeof(a))
#define eps (1e-8)
#define J 10
#define mod 1000000007
#define MAX 0x7f7f7f7f
#define PI 3.14159265358979323
#define N 100004
using namespace std;
typedef long long LL;
int cas,cass;
int n,m,lll,ans;
struct xxx
{
LL a,b;
}c
;
bool cmp(xxx aa,xxx bb)
{
if(aa.a!=bb.a)return aa.a<bb.a;
return aa.b<bb.b;
}
void work(int x)
{
int l=1,r=n,mid;
LL y1,y2;
c[0].a=0;c[0].b=-1000000001*1000000001;
while(l<r)
{
mid=(l+r)>>1;
y1=c[mid-1].a*x+c[mid-1].b;
y2=c[mid].a*x+c[mid].b;
if(y1<=y2)l=mid+1;
else r=mid;
}
y1=c[r-1].a*x+c[r-1].b;
y2=c[r].a*x+c[r].b;
printf("%I64d\n",max(y1,y2));
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,x;
// for(scanf("%d",&cas);cas;cas--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
while(~scanf("%d",&n))
// while(~scanf("%d",&n))
{
scanf("%d",&m);
for(i=1;i<=n;i++)
scanf("%I64d%I64d",&c[i].a,&c[i].b);
sort(c+1,c+1+n,cmp);
for(i=1;i<n;i++)
if(c[i].a==c[i+1].a)c[i].a=1000000001;
sort(c+1,c+1+n,cmp);
while(c
.a==1000000001)n--;
for(i=1;i<=m;i++)
{
scanf("%d",&x);
work(x);
}
}
return 0;
}
/*
//
//
*/
相关文章推荐
- fzu 2238 Daxia & Wzc's problem
- FOJ有奖月赛-2016年8月 Problem A Daxia & Wzc's problem(找规律)
- fzu 2238 Daxia & Wzc's problem
- FZU Problem 2238 Daxia & Wzc's problem(Lucas定理求组合数)
- 【数论】FOJ 2238 Daxia & Wzc's problem
- FZU 2238 Daxia & Wzc's problem
- FZU Problem 2238 Daxia & Wzc's problem
- FOJ 有奖月赛 2016-8 C Problem C Daxia & Suneast's problem
- FZU 2238 Daxia & Wzc's problem【规律+lucas】
- FZU 2238 - Daxia & Wzc's problem(Lucas)
- Problem 2238 Daxia & Wzc's problem 1627 瞬间移动
- Longge's problem-数论
- UVa 100 / HDU 1032 / POJ 1207 The 3n + 1 problem (数论&Collatz序列周期)
- FZU 2238 Daxia & Wzc's problem
- UVa 524 Prime Ring Problem (数论&DFS)
- POJ 2282 && HDU 1663 The Counting Problem(数论)
- Gym 100299C && UVaLive 6582 Magical GCD (暴力+数论)
- The7th Zhejiang Provincial Collegiate Programming Contest->Problem A:A - Who is Older?
- Ural 2003: Simple Magic(数论&思维)
- HDOJ 1792 A New Change Problem (数论)