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. 开发工具IDEA的使用

    一. 先送上IDEA的下载链接 这是我个人的百度云链接,无毒无公害请放心下载~ 链接:http://pan.baidu.com/s/1kUMbatT 密码:i233 巧妇难为无米之炊,如果还没有下载安 ...

  2. windows store app search contract

    代码如下: html: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  3. Python中zip()函数用法

    定义:zip([iterable, …])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的l ...

  4. [DP] The 0-1 knapsack problem

    Give a dynamic-programming solution to the 0-1 knapsack problem that runs in O(nW) time, where n is ...

  5. Handlebars 介绍

    最新项目用到了Ember.js前端框架,第一次使用这样的框架,准备国庆节花2天时间,研究一下它的用法. Ember框架的模板引擎用到了handlebars, 先看国外的一篇介绍文章:An Introd ...

  6. maven 项目编译时候提示:Error building POM (may not be this project's POM).

    编译时候提示Error building POM (may not be this project's POM)的错误,具体信息如下: [0] 'dependencies.dependency.ver ...

  7. 在eclipse中将项目发布到tomcat的root目录

    (1)设置项目上下文,右击项目-properties   >Web Page Edit

  8. 坚果云创业团队访谈:我们 DIY 云存储(不要过度关注竞争对手,尤其当我们还是小公司的时候)

    坚果云(http://jianguoyun.com/)是一款用于多平台文件同步.备份和交换的云存储工具,立志于提供“便捷,安全”的服务.坚果云自去年年初启动内测,至今年三月初刚刚正式发布.近日我们拜访 ...

  9. 146. LRU Cache

    题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...

  10. Android 性能优化之使用MAT分析内存泄露问题

    我们平常在开发Android应用程序的时候,稍有不慎就有可能产生OOM,虽然JAVA有垃圾回收机,但也不能杜绝内存泄露,内存溢出等问题,随着科技的进步,移动设备的内存也越来越大了,但由于Android ...