143 - ZOJ Monthly, October 2015

5 篇文章 0 订阅
1 篇文章 0 订阅

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 

#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;
} 

Birthday Gift


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][n/2]);
	}
	return 0;
} </span>

Suika's Chain

Two Ellipses

Number Game

Gene Cluster

Market

Prime Query

Coins

Bob wants to pour water

Semantic Version
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值