D. Olya and magical square

题目链接https://codeforces.com/contest/1080/problem/D

题意:

给出一个边长为2n的正方形,每次可以将其划分,要求划分出来从左下角到右上角沿着左边和上边的边走的路径的小正方形边长相等。现在有k个划分的机会,问是否能把k次机会用完(当边长为1时则不能划分了),如果可以,输出路径上的小正方形的边长长度。

题解:

这题看题解看了半天,最终应该说是搞懂了...

首先,划分思路是这样的,先划分一下成四块,然后每次划分都划分路径上面的正方形,等到路径正方形边长为1了,就随意划分其它的正方形了。

先判断可行性,我们知道,边长为2n的正方形最多只能划分(4n-1)/3次,由于k<=1018,所以当n>30时,必定k是可以用完的。最终,只要(4n-1)/3<k,就不能将划分次数用完。这里分n>30和n<=30是因为数据太大了,这样可以避免求4n时溢出。

当k可以用完时,我们再来看,我们就以上面说的划分思路来划分。

首先,划分一次变为四个正方形;

然后,对路径上面的正方形进行划分,每次全部划分需要消耗2i+1-1个划分次数。假设我们在第x次时,有k<2x+1-1,也就是说对路径上的正方形进行x-1轮划分过后,不能进一步划分,通过这里可以推出x-1<=n-1即x<=n。现在再来看右下角这个边长为2n-1的正方形,容易知道它最多划分(4n-1-1)/3次。

又2x+1-1<=2n+1-1,令(4n-1-1)/3>=2n+1-1,解得n>=5,也就是说当n>=5时,必定可以成功划分。(想一想为什么)

假定n>=3,那么会多出来5个边长为2n-2的小正方形,现在有5*(4n-2-1)/3+(4n-1-1)/3>=2n+1-1,可以解得n>=4,进一步推出n>=4时可以成功划分。

假定n=3,那么最多可以划分21次,减去一次就是20次,根据划分思路,最右下角的正方形可以划分5次,边长为2的正方形有5个,最终也是划分五次。划分路径上的正方形最多是十次。结合这个,当k取1-21之间的任意数时,都可以成功划分。(想一想,为什么)

综上,当n>=3时,当k能被用尽的情况下,必然能够满足条件(成功划分),使得路径上的小正方形边长相等。

我们再来分析n=2的情况,易知当k=3时,不能成功划分,其余都可以。

对于n=1,就不用说了。

综上,首先判断k次划分机会是否能用完,然后除开n=2,k=3的特例,根据划分思路进行划分。

Update:

后来又想了一下,可以把这个简化一下,比如现在我们对于左边和右边的正方形划分了x-1次,那么划分的总次数就为22-1+23-1+...+2x-1=2x+1-3-x次,对于右下角的正方形划分总次数至少也可以为

(4x-1-1)/3,现在还是有k<2x+1-1。

令2x+1-3-x+(4x-1-1)/3>=2x+1-1解得x>=3。

即当操作了x-1>=2次之后,k都能被用尽,加上之前划分的那一次,就是3次。

最终可以得出,当n>=3时,k都能够被用尽,就不用像我之前那么麻烦了,最后单独看一下n=1,n=2的情况就ok了。

代码如下:

#include <bits/stdc++.h>
using namespace std; typedef long long ll ; ll pathl(ll n,ll k){
k--;
ll pow2 = ,cnt = ;
while(k>=pow2-){
cnt++;
k-=(pow2-);
pow2*=;
}
return max(n--cnt,(ll));
}
int main(){
ll t,n,k;
cin>>t;
while(t--){
cin>>n>>k;
if(n== && k==){
puts("NO");continue ;
}
ll pow4=,tmp1=k,tmp2=n;
if(n<=){
while(tmp2--){
tmp1-=pow4;
pow4*=;
}
if(tmp1>){
puts("NO");continue;
}
printf("YES %d\n",pathl(n,k));
}else{
printf("YES %d\n",pathl(n,k));
}
} return ;
}

总得来说,这题的关键就是划分思路,其余都可以推导出来。

Codeforces Round #524 (Div. 2) D. Olya and magical square的更多相关文章

  1. Codeforces Round #524 (Div. 2)(前三题题解)

    这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...

  2. Codeforces Round #524 (Div. 2) Solution

    A. Petya and Origami Water. #include <bits/stdc++.h> using namespace std; #define ll long long ...

  3. Codeforces Round #877 (Div. 2) D. Olya and Energy Drinks

    题目链接:http://codeforces.com/contest/877/problem/D D. Olya and Energy Drinks time limit per test2 seco ...

  4. Codeforces Round #524 (Div. 2) F. Katya and Segments Sets(主席树)

    https://codeforces.com/contest/1080/problem/F 题意 有k个区间,区间的种类有n种,有m个询问(n,m<=1e5,k<=3e5),每次询问a,b ...

  5. Codeforces Round #524 (Div. 2) E. Sonya and Matrix Beauty(字符串哈希,马拉车)

    https://codeforces.com/contest/1080/problem/E 题意 有一个n*m(<=250)的字符矩阵,对于每个子矩阵的每一行可以任意交换字符的顺序,使得每一行每 ...

  6. Codeforces Round #524 (Div. 2) C. Masha and two friends(矩形相交)

    C. Masha and two friends time limit per test 1 second memory limit per test 256 megabytes input stan ...

  7. Codeforces Round #524 (Div. 2) B. Margarite and the best present

    B. Margarite and the best present 题目链接:https://codeforces.com/contest/1080/problem/B 题意: 给出一个数列:an=( ...

  8. Codeforces Round #524 (Div. 2) codeforces 1080A~1080F

    目录 codeforces1080A codeforces 1080B codeforces 1080C codeforces 1080D codeforces 1080E codeforces 10 ...

  9. Codeforces Round #524 (Div. 2)C 二维坐标系求俩矩形面积交

    题:https://codeforces.com/contest/1080/problem/C 题意:给n*m的二维坐标系,每个位置(xi,yi)都表示一个方格,(1,1)的位置是白色,整个坐标系黑白 ...

随机推荐

  1. Python爬虫爬取豆瓣电影之数据提取值xpath和lxml模块

    工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统.谷歌浏览器 目的:爬取豆瓣电影排行榜中电影的title.链接地址.图片.评价人数.评分等 网址:https:// ...

  2. Codeforces 845 C Two TVs

    参考:https://blog.csdn.net/xjh_shin/article/details/77491693 #include <iostream> #include <cs ...

  3. LeetCode:15. 3Sum(Medium)

    1. 原题链接 https://leetcode.com/problems/3sum/description/ 2. 题目要求 数组S = nums[n]包含n个整数,请问S中是否存在a,b,c三个整 ...

  4. 插件开发遇到的坑------final 型变量,编译过程被优化

    android 插件开发遇到的坑 今天遇到一个坑,pdf 插件,调用了主工程的一个静态final 字符串,但是主工程里面已经没有这个字符串了,却没有崩溃. 后来同事说,因为字符串可能已经直接被写死了. ...

  5. PIC32MZ 通过USB在线升级 -- USB CDC bootloader

    了解bootloader 的实现,请加QQ: 1273623966 (验证填 bootloader):欢迎咨询或定制bootloader:我的博客主页www.cnblogs.com/geekygeek ...

  6. Percona-Tookit工具包之pt-mysql-summary

      Preface       Sometimes we need to collect information of  MySQL server as a report when we first ...

  7. python+UIAutomation+libary

    #! /usr/bin/env python#Author: XIE TIAN# -*- coding:utf8 -*-from __future__ import unicode_literalsi ...

  8. 《python核心编程第二版》第3章习题

    3-1. 标识符.为什么 Python 中不需要变量名和变量类型声明? 答: 对象的类型和内存占用都是运行时确定的. 尽管代码被编译成字节码,Python 仍然是一种解释 型语言. 在创建也就是赋值时 ...

  9. spring boot 线程池配置

    1.配置类 package cn.com.bonc.util; import java.util.concurrent.Executor; import java.util.concurrent.Th ...

  10. 1034 Head of a Gang (30 分)(图的遍历or并查集)

    dfs #include<bits/stdc++.h> using namespace std; ; int mp[N][N]; int weight[N]; int vis[N]; ma ...