Bestcoder round#85 解题报告
来源:互联网 发布:张大奕淘宝店有几家 编辑:程序博客网 时间:2024/05/18 02:40
1001 sum
计算下前缀和,看有没有模
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<iostream>#include<algorithm>#include<set>#include<map>#include<queue>#include<stack>#include<vector>#include<bitset>using namespace std;int pp[5100];int T;int flag;int n,k;int sum;int main(){ scanf("%d",&T); while (T--) { flag=0; memset(pp,0,sizeof(pp)); pp[0]=1; scanf("%d %d",&n,&k); sum=0; for (int i=1;i<=n;i++) { int x; scanf("%d",&x); sum=(sum+x)%k; if (pp[sum]) flag=1; pp[sum]=1; } if (flag) printf("YES\n"); else printf("NO\n"); } return 0;}
1002 domino
贪心去掉
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<iostream>#include<algorithm>#include<set>#include<map>#include<queue>#include<stack>#include<vector>#include<bitset>using namespace std;typedef long long LL;int a[110000];int T;int flag;int n,k;LL ans;int main(){ scanf("%d",&T); while (T--) { scanf("%d %d",&n,&k); for (int i=1;i<n;i++) scanf("%d",&a[i]); sort(a+1,a+n); ans=0; for (int i=1;i<=max(n-k,0);i++) ans+=(LL)(a[i]+1LL); cout<<ans+min((LL)k,(LL)n)<<endl; } return 0;}
1003 abs
因为y的每个质因子的次数都为2,所以
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<iostream>#include<algorithm>#include<set>#include<map>#include<queue>#include<stack>#include<vector>#include<bitset>#include<ctime>using namespace std;typedef long long LL;LL x;int T;LL ans1,ans2;int check(LL x){ for (LL i=2;i*i<=x;i++) { if (x%i==0) { x/=i; if (x%i==0) return 0; } } return 1;}int main(){ cin>>T; while (T--) { cin>>x; LL d=(LL)sqrt((double)x+0.5); for (LL i=1;;i++) { if (check(d+i)&&d+i>=2) { ans1=abs(x-(d+i)*(d+i)); break; } } ans2=1e18; for (LL i=0;;i++) { if ((d-i)<2) break; if (check(d-i)) { ans2=abs(x-(d-i)*(d-i)); break; } } cout<<min(ans1,ans2)<<endl; } return 0;}
1004 Tower Defence
dp,
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<iostream>#include<algorithm>#include<set>#include<map>#include<queue>#include<stack>#include<vector>#include<bitset>#include<ctime>using namespace std;typedef long long LL;const LL mod=1e9+7;int n,k;LL f[61][61][61];LL ans;LL pow_mod(LL a,LL b,LL p){ LL tmp=1; a%=p; for(LL i=b;i;i>>=1,a=a*a%p) if(i&1)tmp=tmp*a%p; return tmp;}int T;LL C[70][70];int main(){ C[0][0]=1; for(int i=1;i<=61;i++){ C[i][0]=1; for (int j=1;j<=i;j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod; } scanf("%d",&T); while (T--) { scanf("%d %d",&n,&k); memset(f,0,sizeof(f)); f[1][0][1]=1; ans=0; for (int i=0;i<k;i++) { for (int j=1;j<=n;j++) for (int l=1;l<=j;l++) { if (f[j][i][l]==0) continue; ans=(ans+f[j][i][l]*pow_mod(2,(LL)(n-j)*(n-j-1)/2LL,mod))%mod; for (int ll=1;ll<=n-j;ll++) { LL d=(((f[j][i][l]*pow_mod(pow_mod(2,l,mod)-1+mod,ll,mod))%mod)*pow_mod(2,(LL)(ll)*(ll-1)/2LL,mod))%mod; d=(d*C[n-j][ll])%mod; f[j+ll][i+1][ll]=(f[j+ll][i+1][ll]+d)%mod; } } } cout<<ans<<endl; } return 0;}
1005 gcd
首先证明一个小结论:
当
由此可以得出:
枚举
我们发现s[d]的值只与
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<iostream>#include<algorithm>#include<set>#include<map>#include<queue>#include<stack>#include<vector>#include<bitset>using namespace std;typedef long long LL;int T;const int maxn=1100000;const LL mod=1e9+7;LL phi[maxn];LL sum[maxn];LL ans;LL x,n;LL l,r;void getPhi(){ for (int i=1;i<maxn;i++) phi[i]=i; for (LL i=2;i<maxn;i++) if (i==phi[i]) for (LL j=i;j<maxn;j+=i) phi[j]=(phi[j]/i)*(i-1);}LL cal(LL x){ LL l=1,r=n,ans; while (l<=r) { LL mid=l+r>>1; if (n/mid>=x) ans=mid,l=mid+1; else r=mid-1; } return ans;}LL extended_gcd(LL a,LL b,LL &x,LL &y){ if (b==0) { x=1,y=0; return a; } else { LL r=extended_gcd(b,a%b,y,x); y-=x*(a/b); return r; }}LL pow_mod(LL a,LL b,LL p){ LL tmp=1; a%=p; for(LL i=b;i;i>>=1,a=a*a%p) if(i&1)tmp=tmp*a%p; return tmp;}LL inv(LL a,LL n){ LL xx,yy,d=extended_gcd(a,n,xx,yy); return (xx%n+n)%n;}LL cc(LL l,LL r){ LL res=(pow_mod(x,r+1,mod)-pow_mod(x,l,mod)+mod)*(inv(x-1,mod))%mod; res=(res-r+l-1+mod)%mod; return res;}int main(){ getPhi(); for (int i=1;i<maxn;i++) sum[i]=(sum[i-1]+phi[i])%mod; for (int i=1;i<maxn;i++) sum[i]=(2*sum[i]-1)%mod; cin>>T; while (T--) { cin>>x>>n; if (x==1) { cout<<0<<endl; continue; } ans=0; l=1; while (l<=n) { r=cal(n/l); ans=(ans+cc(l,r)*sum[n/l])%mod; l=r+1; } cout<<ans<<endl; } return 0;}
0 0
- Bestcoder round#85 解题报告
- BestCoder Round #55 解题报告
- 【解题报告】BestCoder Round #75
- 【解题报告】BestCoder Round #80
- Bestcoder round#31 解题报告
- Bestcoder round#32 解题报告
- Bestcoder round#33 解题报告
- Bestcoder round#34 解题报告
- Bestcoder round#84 解题报告
- bestcoder round#86解题报告
- BestCoder Round #1 解题报告
- BestCoder Round #2 解题报告
- BestCoder Round #10(解题报告)
- BestCoder Round #77 (div.2)解题报告
- 【解题报告】BestCoder Round #77 (div.2)
- BestCoder Round #85题解报告
- BestCoder Round #85题解报告
- HDU 4989 Summary BestCoder Round #8 解题报告
- 仿宝宝树孕育的圆形ListView的实现
- 锤子剪刀布
- Android开发笔记之RecycleView加载不同item布局的实现
- 位运算的特殊用途
- Wordpress条件标签的使用
- Bestcoder round#85 解题报告
- C#控制台 VS2015使用技巧 生成类图的步骤
- CDOJ 1144 Big Brother
- 说反话
- 华为面试
- HDOJ 5778 abs(质因数分解)
- 恺撒Caesar密码
- JAVA配置临时环境变量
- Visual Studio Code使用心得