vijosP1447 开关灯泡

链接:https://vijos.org/p/1447

【思路】

数学+高精度。

分析题目:题中有言,i时刻将其所有倍数的灯熄灭,由此得知一个数有多少个倍数就会被操作多少次,因为初始全部熄灭,所以操作数为奇的灯最后会亮着,再进一步,只有序号为平方数的灯在最后会亮着。

由此题目转化为求n以内平方数的个数,个数为sqrt(n)个(别问我怎么知道的=_=)

数据范围要求我们用到高精。至此,题目就是对一个大数开方的问题,NOIP的初赛曾出现过这个程序。

【代码】

 #include<iostream>
#include<cstring>
#include<cmath>
using namespace std; const int maxn = +;
struct Bign{
int len;
int num[maxn];
Bign() { memset(num,,sizeof(num)); }
}; Bign goal; Bign times(Bign a,Bign b) {
Bign c;
c.len=a.len+b.len+;
for(int i=;i<a.len;i++)
for(int j=;j<b.len;j++)
c.num[i+j] += a.num[i]*b.num[j];
for(int i=;i<c.len-;i++) {
c.num[i+] += c.num[i]/;
c.num[i] %= ;
}
while(c.num[c.len-]==) c.len--;
return c;
} Bign average(Bign a,Bign b) {
Bign c; c.len=max(a.len,b.len);
for(int i=;i<c.len;i++) {
c.num[i] += a.num[i]+b.num[i];
c.num[i+] += c.num[i]/;
c.num[i] %= ;
} if(c.num[c.len]) c.len++;
for(int i=c.len-;i;i--) {
c.num[i-] += (c.num[i]%) *;
c.num[i] /= ;
}
c.num[]/=;
if(c.num[c.len-]==) c.len--;
return c;
} Bign plustwo(Bign a) {
a.num[] += ;
int i=;
while(i<a.len && a.num[i]>=) {
a.num[i+] += a.num[i]/;
a.num[i] %= ;
i++;
}
if(a.num[a.len]) a.len++;
return a;
} bool over(Bign a,Bign b) {
if(a.len>b.len) return true;
else if(a.len<b.len) return false; for(int i=a.len;i>=;i--) //倒序
if(a.num[i]>b.num[i]) return true;
else if(a.num[i]<b.num[i]) return false; return false;
} int main() {
ios::sync_with_stdio(false);
string s;
cin>>s;
goal.len=s.size();
for(int i=;i<goal.len;i++) goal.num[i]=s[goal.len--i]-'';
Bign L , R=goal , M;
L.len=; L.num[]=;
do
{
M=average(L,R);
if(over(times(M,M),goal)) R=M;
else L=M;
} while(! over(plustwo(L),R)) ;
for(int i=L.len-;i>=;i--) cout<<L.num[i];
return ;
}

vijosP1447 开关灯泡的更多相关文章

  1. vijos - P1447开关灯泡 (大数模板 + 找规律 + 全然数 + python)

    P1447开关灯泡 Accepted 标签:CSC WorkGroup III[显示标签] 描写叙述 一个房间里有n盏灯泡.一開始都是熄着的,有1到n个时刻.每一个时刻i,我们会将i的倍数的灯泡改变状 ...

  2. vijos-1447 开关灯泡-大整数开方算法

    描述 一个房间里有n盏灯泡,一开始都是熄着的,有1到n个时刻,每个时刻i,我们会将i的倍数的灯泡改变状态(即原本开着的现将它熄灭,原本熄灭的现将它点亮),问最后有多少盏灯泡是亮着的. 提示 范围:40 ...

  3. 【vijos】1447 开关灯泡(高精度+特殊的技巧)

    https://vijos.org/p/1447 一开始想了想似乎只想到了与约数个数有关,即约数个数为奇数那么显然是亮的. 竟然没想到完全平方数..sad.. 在正因子中,只有完全平方数的正因子才是奇 ...

  4. 2.计算机组成-数字逻辑电路 门电路与半加器 异或运算半加器 全加器组成 全加器结构 反馈电路 振荡器 存储 D T 触发器 循环移位 计数器 寄存器 传输门电路 译码器 晶体管 sram rom 微处理 计算机

    现代计算机的各个部件到底是如何通过逻辑电路构成的呢   半加器 我们说过了门电路 看似简单的三种门电路却是组成了整个逻辑电路的根基 真值表--其实就是根据输入输出状态枚举罗列出来的所有可能 比如有一台 ...

  5. [Swift]LeetCode319. 灯泡开关 | Bulb Switcher

    There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every ...

  6. 2019大疆PC软件开发笔试——开关和灯泡两个电路板

    题目描述: 小A是一名DIY爱好者,经常制作一些有趣的东西. 今天,小A突然想要来做这样一个东西.小A现在有两块同样大小为n×m,有n×m块大小为1×1小电路板拼成的矩形电路板,假设叫做电路板A和电路 ...

  7. Leetcode 672.灯泡开关II

    灯泡开关II 现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮.在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态. 假设这 n 只灯泡被编号为 [1, 2, 3 . ...

  8. LeetCode:灯泡开关2

    题目 现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮.在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态. 假设这 n 只灯泡被编号为 [1, 2, 3 ..., ...

  9. Leetcode 319.灯泡开关

    灯泡开关 初始时有 n 个灯泡关闭.第 1 轮,你打开所有的灯泡.第 2 轮,每两个灯泡你关闭一次.第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭).第 i 轮,每 i 个灯泡切换 ...

随机推荐

  1. MVC5之路由机制

    ---恢复内容开始--- MVC是一种模式,是基于asp.net上的一种设计.路由机制不属于MVC,路由机制属于asp.net.因此,mvc的路由机制就是基于asp.net路由机制上的一种“自定制”. ...

  2. 解决IE 下div与img重叠无法触发鼠标事件的问题

    在IE下当我想在img标签上层显示一个div元素时,此时如果该div的background为空白(没有设置图片.或者颜色填充),会导致该div的鼠标事件失效:如果设置border为1px solid ...

  3. js replace in multi-line string

    .replace(/{id}/g, '_' + counter);

  4. sublimtest3文件名乱码问题及解决方案

    在sublime text 3中,Preference, Settings-User,最后加上一行"dpi_scale": 1.0覆盖操作系统设置的DPI. 这是我的Setting ...

  5. leetcode-173:Binary Search Tree Iterator(Java)

    Binary Search Tree Iterator Implement an iterator over a binary search tree (BST). Your iterator wil ...

  6. 由abcd四个字符取5个作允许重复的排列,要求a出现次数不超过2次,但不能不出现;b不超过1个;c不超过3个;d出现的次数为偶数。求满足以上条件的排列数。

    一.我的解法       由于没复习,我在想一般的方法,那就是d取0.2.4,然后分步计算,得到225这个错误答案. 二.指数型母函数       设满足以上条件取个排列的排列数为,的指数型母函数为 ...

  7. COOKIE漫谈

    cookie概述在上一节,曾经利用一个不变的框架来存储购物栏数据,而商品显示页面是不断变化的,尽管这样能达到一个模拟全局变量的功能,但并不严谨.例如在导航框架页面内右击,单击快捷菜单中的[刷新]命令, ...

  8. zepto源码学习-03 $()

    在第一篇的时候提到过关于$()的用法,一个接口有很多重载,用法有很多种,总结了下,大概有一以下几种 1.$(selector,context?) 传入一个选择器返回一个zepto对象 2.$(func ...

  9. Ubutn14.04下caffeine工具不显示在工具栏中的问题

    安装过程请参考Ubuntu 14.04下安装Caffeine 2.6.2 阻止显示器进入睡眠状态 至于为什么不显示在任务栏,这不是程序的bug,你可以平ps -e看一下,任务已经在运行. 其实这是新版 ...

  10. 开启CURL扩展,让服务器支持PHP curl函数(远程采集)

    关于开启Curl的方法模板天下小编在此给大家简单说一下 curl().file_get_contents().snoopy.class.php这三个远程页面抓取或采集中用到的工具,默迹还是侵向于用sn ...