143 - ZOJ Monthly, October 2015
2015-10-23 19:58
309 查看
【A Ant】
比赛的时候公式推出来了,可是取模那一块弄错了,一直wa
假设另外两条边是x,y
那么最短的路线就是len = x^2 + y^2 + n^2 + 2*x*y
这个公式分成三个部分求
s1 = sum(x^2 + y^2)
s2 = sum(n^2)
s3 = sum(2*x*y)
假设n=3
n x y
3 3 3
3 3 2
3 3 1
3 2 2
3 2 1
3 1 1
显然s2 = (n^2) * n *(n+1)/ 2
s1的公式也是简单的
对于每一个i (1 <= i <= n), i^2都有(n+1)个
s1 = (n + 1)* ( n*(n+1)*(n+2)/6 )
难点是s3,需要通过规律得到
s3 = ( n * (n+1)/2 )^ 2+ n*(n+1)*(n+2)/6
【B Birthday Gift】
【C Cake】
最大的p[ i ].b都是Bob拿走的
先按p[ i ].b从大到小排序
dp的转移方程式是
dp[ i ][ j ] = max ( dp[ i-1 ][ j ] , dp[ i-1 ][ j-1 ] + p[ i ].a)
i:前i个 j:Alice取了j个
j <= i/2
【D Suika's Chain】
【E Two Ellipses】
【F Number Game】
【G Gene Cluster】
【H Market】
【I Prime Query】
【J Coins】
【K Bob wants to pour water】
【L Semantic Version】
比赛的时候公式推出来了,可是取模那一块弄错了,一直wa
假设另外两条边是x,y
那么最短的路线就是len = x^2 + y^2 + n^2 + 2*x*y
这个公式分成三个部分求
s1 = sum(x^2 + y^2)
s2 = sum(n^2)
s3 = sum(2*x*y)
假设n=3
n x y
3 3 3
3 3 2
3 3 1
3 2 2
3 2 1
3 1 1
显然s2 = (n^2) * n *(n+1)/ 2
s1的公式也是简单的
对于每一个i (1 <= i <= n), i^2都有(n+1)个
s1 = (n + 1)* ( n*(n+1)*(n+2)/6 )
难点是s3,需要通过规律得到
s3 = ( n * (n+1)/2 )^ 2+ n*(n+1)*(n+2)/6
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <string> using namespace std; #define mod 1000000007 #define ll long long int ll mul(ll a,ll n) { ll s=1; while(n) { if(n&1) s=(s*a)%mod; a=(a*a)%mod; n>>=1; } return s; } int main() { int t; scanf("%d",&t); while(t--) { ll n; scanf("%lld",&n); n%=mod; ll s1,s2,s3; s1=(n+2)%mod*n%mod*(n+1)%mod*(2*n%mod+1)%mod*mul(6,mod-2)%mod; s2=n%mod*n%mod*n%mod*(n+1)%mod*mul(2,mod-2)%mod; s3=n%mod*n%mod*(n+1)%mod*(n+1)%mod*mul(4,mod-2)%mod; ll ans=(s1+s2+s3)%mod; // cout<<s1<<" "<<s2<<" "<<s3<<endl; printf("%lld\n",ans); } return 0; }
【B Birthday Gift】
【C Cake】
最大的p[ i ].b都是Bob拿走的
先按p[ i ].b从大到小排序
dp的转移方程式是
dp[ i ][ j ] = max ( dp[ i-1 ][ j ] , dp[ i-1 ][ j-1 ] + p[ i ].a)
i:前i个 j:Alice取了j个
j <= i/2
<span style="font-size:14px;">#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <string> using namespace std; int dp[805][805]; struct node { int a,b; friend bool operator < (const node n1,const node n2) { return n1.b>n2.b; } }p[805]; int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&p[i].a,&p[i].b); } memset(dp,0,sizeof(dp)); sort(p+1,p+1+n); for(int i=1;i<=n;i++) { for(int j=1;j<=i/2;j++) { dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]+p[i].a); } } printf("%d\n",dp [n/2]); } return 0; } </span>
【D Suika's Chain】
【E Two Ellipses】
【F Number Game】
【G Gene Cluster】
【H Market】
【I Prime Query】
【J Coins】
【K Bob wants to pour water】
【L Semantic Version】
相关文章推荐
- C 博客快捷键
- Java-ServletContextListener
- AVL树
- 【POJ 2240】Arbitrage
- 模型与设计
- string.Format对C#字符串格式化
- 01-复杂度1 最大子列和问题 (20分)
- Android SlidingDrawer(滑动式抽屉)
- 关 于 vim 的 类 习 题
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
- python中的else子句
- 流水线,耶!
- List<Map<String, String>> 开启 Map<String, List<String>>
- 【faebdc的模拟赛】T1错位
- Android 悬浮窗权限问题解决
- 素数判断
- CUDA学习笔记(三)
- 架构师的讨论
- Centos 开机自启动一些软件配置
- Centos 开机自启动一些软件配置