20180625模拟赛

暴力AC还行

T1 statistics 数列统计

看到这个题莫名想到昨天晚上死命想优化的车厢重组就知道应该是个数据结构,但是由于车厢重组线段树写挂了觉得比较难搞,所以写了个暴力=_=
O ( n 2 ) O(n^2) O(n2)蜜汁80还行

	for (int i = 2 ; i <= n ; i ++)
	 {
	  long long duang = 0;
	  for (int j = 1 ; j < i ; j ++)
	   duang += 1LL * (a[j] < a[i]) * (a[i] - a[j]) * (a[i] - a[j]) ;
	  printf("%lld\n", duang );
     }

正解:从小到大插入 a i a_i ai
维护三个信息:
1.前i个插入数的个数b(i)
2.前i个插入数的和c(i)
3.前i个插入数的平方和d(i)
可 推 得 f ( i ) = a i 2 ∗ b ( i ) − 2 ∗ c ( i ) ∗ a i + d ( i ) 可推得f(i)=a_i^2*b(i)-2*c(i)*a_i+d(i) f(i)=ai2b(i)2c(i)ai+d(i)
很多数据结构都可以写
(std似乎写的CDQ分治)

T2 point 圆上整点

HAOI原题还行
这道题直接推过程:
由 x 2 + y 2 = r 2 得 y 2 = r 2 − x 2 = ( r + x ) ( r − x ) 由x^2+y^2=r^2得y^2=r^2-x^2=(r+x)(r-x) x2+y2=r2y2=r2x2=(r+x)(rx)
设 d = g c d ( r + x , r − x ) 设d=gcd(r+x,r-x) d=gcd(r+x,rx)
那 么 g c d ( ( r + x ) / d , ( r − x ) / d ) = 1 那么gcd((r+x)/d,(r-x)/d)=1 gcd((r+x)/d,(rx)/d)=1
又 ∵ y 2 = ( ( r + x ) / d ) ∗ ( ( r − x ) / d ) ∗ d 2 又\because y^2=((r+x)/d)*((r-x)/d)*d^2 y2=((r+x)/d)((rx)/d)d2
∴ ( r + x ) / d 和 ( r − x ) / d 都 为 完 全 平 方 数 \therefore (r+x)/d和(r-x)/d都为完全平方数 (r+x)/d(rx)/d
设 a 2 = ( r − x ) / d ∗ b 2 = ( r + x ) / d 设a^2=(r-x)/d*b^2=(r+x)/d a2=(rx)/db2=(r+x)/d
那 么 a 2 + b 2 = 2 r / d 那么a^2+b^2=2r/d a2+b2=2r/d
( a 2 + b 2 ) 和 d 是 2 r 的 因 数 (a^2+b^2)和d是2r的因数 (a2+b2)d2r

所以就可以这样求解了:(代码只过了样例)

void work()
{
	long long l = r << 1 ;
	long long n = sqrt(l) ;
	int ans = 0;
	for (long long i = 1 ; i <= n ; i ++ )//枚举d
	 if ( ! (l % i) )
	  {
	  	long long m = sqrt(l / (i << 1) ) ;
	  	for (long long j = 1 ; j <= m ; j ++ )//枚举a
	  	 {
	  	 	long long k = sqrt(l / i - sqr(j) ) ;//推出b
	  	 	if ( ! ( sqr(k) ^ l / i - sqr(j) ) && ! ( gcd( sqr(j), sqr(k) ) ^ 1 ) && sqr(j) ^ sqr(k) ) //判定是否满足条件
		      ans ++ ;
	  	 }
	  	if (i ^ ( l / i ) )
	  	 {
	  	 	long long m = sqrt(i >> 1) ;
	  	 	for (long long j = 1 ; j <= m ; j ++ )//枚举a
	  	 	 {
	  	 	 	long long k = sqrt( i - sqr(j) ) ;//推出b 	
	  	 	 	if ( ! ( sqr(k) ^ i - sqr(j) ) && ! ( gcd( sqr(j), sqr(k) ) ^ 1 ) && sqr(j) ^ sqr(k) )//判定是否满足条件
	  	 	 	  ans ++ ;
	  	 	 }
	  	 }
	  }
	printf("%d\n", ( ans << 2 ) + 4 );
}

T3 debug debug

这道题先写暴力,由于题目上说是最大值,可以直接从大到小枚举长度,再枚举左上角坐标,再暴力判定是否满足题目要求(评测机跑得飞快数据水,这个暴力最初卡过去了,后来换了编译器只T了一个点,换回来又卡过去了,过一会又只T了一个点)

正解蜜汁也是暴力
首先有如下事实——
对于中心相同的矩阵,若边长为a的正方形可行,则边长为[2,a-1]的正方形也可行,否则,边长大于a的正方形不可行

枚举矩阵的中心,假设边长为a的正方形可行,若要判断边长为a+1的正方形是否可行,可判断某一行是否和另一行反向相同。

可以通过压缩二进制来实现判断某一行是否和另一行反向相同,时间复杂度O( 玄学 n^4/32)
也可以使用hash来判断,时间复杂度O( 玄学 n^3),看起来比上面的优秀蒂花之秀

(暴力要打好啊)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值