bc#29 做题笔记
2015-02-08 16:55
197 查看
昨天的bc被坑惨了= =
本来能涨rating的大好机会又浪费了。。。大号已弃号
A:第一反应是高精度,结果模板找不到了= =,然后现学现卖拍了个java的BigInteger+快速幂,调了好半天不说还TLE。貌似这题就在卡java
实际上尼玛等号两边取log不就完了么。。。
卒
B:A题调了半天,开始做B的时候已经没多少时间了。。。
找出了斐波那契数列+前缀和的规律,结果把用矩阵快速幂求斐波那契前n项和的那个梗又忘了
最后out of submit time
卒
事实证明还是要多做成套的题,这样才能发现很多平时难以察觉到的问题。
-------------------------------------------------
补上AC Code:
A:高你妹妹的高精度
View Code
本来能涨rating的大好机会又浪费了。。。大号已弃号
A:第一反应是高精度,结果模板找不到了= =,然后现学现卖拍了个java的BigInteger+快速幂,调了好半天不说还TLE。貌似这题就在卡java
实际上尼玛等号两边取log不就完了么。。。
卒
B:A题调了半天,开始做B的时候已经没多少时间了。。。
找出了斐波那契数列+前缀和的规律,结果把用矩阵快速幂求斐波那契前n项和的那个梗又忘了
最后out of submit time
卒
事实证明还是要多做成套的题,这样才能发现很多平时难以察觉到的问题。
-------------------------------------------------
补上AC Code:
A:高你妹妹的高精度
#include <iostream> #include <algorithm> #include <cstdio> #include <vector> using namespace std; #define ULL long long #define MOD 10000007 ULL ans,mx1,mx2; ULL n,k,x; typedef vector<ULL> vec; typedef vector<vec> mat; int a[100010]; mat mul(mat &A,mat &B) //return A*B { mat C(A.size(),vec(B[0].size())); for (int i=0;i<(int)A.size();i++) { for (int k=0;k<(int)B.size();k++) { for (int j=0;j<(int)B[0].size();j++) { C[i][j]=(C[i][j]+A[i][k]*B[k][j])%MOD; } } } return C; } mat m_pow(mat A,int m) //return A^m { mat B(A.size(),vec(A.size())); for (int i=0;i<(int)A.size();i++) B[i][i]=1; while (m>0) { if (m&1) B=mul(B,A); A=mul(A,A); m>>=1; } return B; } int main() { //while (cin>>n>>k) while (~scanf("%d%d",&n,&k)) { mat AA(3,vec(3)); mat A(3,vec(3)); mat B(3,vec(3)); mat C(3,vec(1)); mat D(3,vec(1)); mat T(3,vec(1)); T[0][0]=2; T[1][0]=1; T[2][0]=1; A[0][0]=1; A[0][1]=1; A[0][2]=1; A[1][0]=0; A[1][1]=1; A[1][2]=1; A[2][0]=0; A[2][1]=1; A[2][2]=0; AA=A; A=m_pow(A,k-2); C=mul(A,T); B=mul(A,AA); //B=m_pow(B,k-1); D=mul(B,T); ULL FK=C[0][0],FKK=D[0][0]-1; if (k==2) {FK=2; FKK=3;} if (k==1) {FK=1; FKK=1;} //cout<<FK<<" -- "<<FKK<<endl; /* LL fk=1,fkk=2,FK=2,FKK=4; for (int i=3;i<=k;i++) { //fk:f[k] fkk:f[k+1] LL tmp=fk+fkk; fk=fkk; fkk=tmp; fk=fk%MOD; fkk=fkk%MOD; FK+=fk; FKK=FK+fkk; FK=FK%MOD; FKK=FKK%MOD; } FKK-=1; if (FKK<0) FKK+=MOD; */ ans=0; mx1=0; mx2=0; for (int i=1;i<=n;i++) { cin>>x; ans+=x; if (x>mx1) { mx2=mx1; mx1=x; } else if ((x<=mx1)&&(x>mx2)) { mx2=x; } } /* for (int i=1;i<=n;i++) { cin>>a[i]; ans+=a[i]; } sort(a+1,a+n+1); mx1=a ; mx2=a[n-1]; */ //cout<<mx1<<" "<<mx2<<" = "<<ans<<endl; /* for (int i=1;i<=k;i++) { ans=ans+mx1+mx2; ans=ans%MOD; LL tmp=mx1; mx1=mx1+mx2; mx2=tmp; } */ //cout<<ans<<" - "<<FK<<" "<<FKK<<endl; mx1=mx1*FKK; mx1=mx1%MOD; mx2=mx2*FK; mx2=mx2%MOD; ans=ans+mx1+mx2; ans=ans%MOD; //cout<<ans<<endl; printf("%I64d\n",ans); } return 0; }
View Code
相关文章推荐
- 做题笔记之---多项式乘法
- 【SCJP】J@Whiz1.4做题笔记
- 第五次做题笔记
- POJ做题笔记:1000,1004,1003
- [CodeVS1735]方程的解数 做题笔记
- [BZOJ]3223文艺平衡树做题笔记
- 第六次做题笔记
- LeetCode做题笔记之四
- 笔试题做题笔记
- ProjectEuler做题笔记(第1,2题)
- [LeetCode]Best Time to Buy and Sell Stock做题笔记
- 第二次做题笔记
- 第四次做题笔记
- 【LeetCode】Triangle做题笔记
- hdu ACM Steps 做题笔记(Chapter One)
- 编程之美--做题笔记(1)
- 做题笔记
- codeforces做题笔记
- [BZOJ]2733永无乡 做题笔记
- [CodeVS3013]单词背诵 做题笔记