[FZSZOJ 1029] 观察者加强版

1029: 观察者加强版

时间限制: 1 Sec内存限制: 128 MB

题目描述

魔法学院的期末考开始了。
校长Jacobi用魔法在考场生成了一个观察者,以观察考场情况。
整个考场可以看成一个xOy平面,N*N个考生的坐标为(p,q) (1<=p,q<=N, p,q∈Z+),而观察者的坐标为(0,0)。
但是问题来了,就算在把考生抽象成点的理想情况下,Jacobi的观察者也看不到所有考生的动向,这是因为有一些考生被另一些考生遮住了。为了看到被遮住的考生,Jacobi在观察者上附加了魔法”Mana Preception”。现在观察者可以成功看到所有考生,但是看到一个考生需要消耗Jacobi (观察者和该考生的连线穿过的考生数目+1) 单位的魔力。
现在Jacobi想知道若他的观察者能监视整个考场,他需要消耗多少的魔力。

输入

输入文件watcher.in的第一行包含一个正整数N。

输出

输出文件watcher.out包含一个正整数,意义见问题描述。

样例输入

3

样例输出

12

提示

[数据规模]

对于40%的数据:N<=1000。

对于80%的数据:N<=1000000。

对于100%的数据:1<=N<=10000000。

[注意事项]

本题代码长度不得超过2KB。

【题解】

哎,ysy还是比我强啊,我们问了下cyh才推出来。

本题目为莫比乌斯反演。

推导过程见上方

我们枚举D即可,复杂度为O(n)

前面都可以预处理滴。

主要是,最后那个是可以预处理,i要怎么乘上去呢?用等差数列求和即可。

因为对于每块的后面那一坨东西,除了i都是不变的,那么提出来一下就ok啦。

 1 #include<stdio.h>
 2 #include<iostream>
 3 using namespace std;
 4 int mu[10000001];
 5 int n;
 6 int zs[10000001];
 7 int prime[1000001],tot;
 8 long long ans=0;
 9 int f[10000001];
10 int main() {
11     scanf("%d",&n);
12     for(int i=2;i<=n;++i) {
13         if(!zs[i]) {
14             zs[i]=i;
15             prime[++tot]=i;
16         }
17         for (int j=1;j<=tot&&i*prime[j]<=n;++j) {
18             zs[i*prime[j]]=prime[j];
19             if(i%prime[j]==0) break;
20         }
21     }
22     f[1]=1;
23     for (int i=2;i<=n;++i) if(zs[i/zs[i]]!=zs[i]) f[i]=f[i/zs[i]]*-1;
24     int last1;
25     for (int i=1;i<=n;i=last1+1) {
26         last1=n/(n/i);
27         for (int r=i;r<last1;++r) f[last1]+=f[r];
28         if(f[last1]!=0) {
29             long long sum=0;
30             int last2=n/i;
31             int last3;
32             for (int j=1;j<=last2;j=last3+1) {
33                 last3=last2/(last2/j);
34                 sum+=(long long)(last2/j)*(last2/j)*(j+last3)*(last3-j+1)/2;
35             }
36             ans+=sum*f[last1];
37         }
38     }
39     printf("%lld\n",ans);
40     return 0;
41 }

时间: 2024-10-03 22:54:56

[FZSZOJ 1029] 观察者加强版的相关文章

Ember.js 入门指南——观察者(observer)

本系列文章全部从(http://ibeginner.sinaapp.com/)迁移过来,欢迎访问原网站. 1,观察者使用 Ember可以察觉所有属性的变化,包括计算属性.观察者是非常有用的,特别是计算属性绑定之后需要同步的时候. 观察者经常被Ember开发过度使用.Ember框架本身已经大量使用观察者,但是对于大多数的开发者面对开发问题时使用计算属性是更适合的解决方案. 使用方式:可以用"Ember.observer"设置一个对象为观察者. // Observer对于Emberjs来说

BZOJ4407: 于神之怒加强版

4407: 于神之怒加强版 Time Limit: 80 Sec  Memory Limit: 512 MBSubmit: 779  Solved: 368[Submit][Status][Discuss] Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. Output 如题 Sample Input 1 2 3 3 Sample Outp

同步函数 生产者和消费者模式 加强版(多人生产和多人消费)

曾经搞了半天, 生产者和消费者模式  加强版(多人生产 多人消费 ).. 以前的代码格式就不再吐槽了(以后努力改进) //输出结果是一个无限循环 import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 多个生产者&多个消费者模式 * 多个生产者不断生产,多个消费者不停的消费

[2016-03-27][HDU][1029][Ignatius and the Princess IV]

时间:2016-03-30 22:03:01 星期三 题目编号:[2016-03-27][HDU][1029][Ignatius and the Princess IV] 题目大意:给定n个数字,输出其中出现次数超过n/2的数字 #include <algorithm> #include <cstdio> using namespace std; const int maxn = 1E6 + 10; int a[maxn]; int main(){ int n; while(~sc

属性观察者(监听属性的变化)

// 属性观察者, 用于监听属性变化, 在属性变化的时候调用 class Person { var name: String = "" { // 也可以写成willSet{}, 系统默认会传入一个名为newValue的参数 willSet(newValue) { print("name这个属性将被修改了, \(newValue)") } // 也可以写成didSet{} didSet(newValue) { print("name这个属性已经被修改了, \

理解设计模式(观察者)

观察者模式,保证主题和若干观察者之间的一致性. 概述 有时又被称为发布-订阅Subscribe>模式.模型-视图View>模式.源-收听者Listener>模式或从属者模式 此种模式通常被用来实现事件处理系统 特定环境 一个对象改变,同时引发其他若干对象发生变化时 主动改变的对象和被动变化的对象之间相对独立,以便复用和维护 一类问题 一个系统,由一个对象和若干协作对象组成,同时要避免这些对象之间相互耦合 解决方案 抽象主题角色 具体主题角色 抽象观察者角色 具体观察者角色 抽象主题角色

code vs 1029 遍历问题 区间dp

http://codevs.cn/problem/1029/ 给出一棵二叉树(节点是小写字符)的按照先序遍历和后续遍历得到的字符串,其实就是求有多少和二叉树的先序遍历和后序遍历满足这两个字符串.区间dp:dp(l, r, a, b)表示s字符串的(l, r)段和t字符串的(a, b)段相匹配的方案数.那么s[l]和t[b]必须一样,因为这两个是这一段的根节点.然后我们再枚举(l,r)的左子树(l+1,k)和(a,b)的左子树(a,a+k-l-1);dp(l,r,a,b) = sum(dp(l+1

Observer(观察者)模式

1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信.但是出于各种原因,你也许并不愿意因为代码环境的改变而对代码做大的修改.也许,你只想根据你的具体应用环境而改进通信代码.或者,你只想简单的重新构造通信代码来避免类和类之间的相互依赖与相互从属. 2.问题 当一个对象的状态发生改变时,你如何通知其他对象?是否需要一个动态方案――一个就像允许脚本的执行一样,允

设计模式——观察者

观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,他的所有的依赖者都会收到通知并自动更新: 定义主题,主题的功能是持有观察者的引用,提供注册.取消注册和通知,并且有状态:观察者实现接口中的update方法,必须注册具体主题: JDK自带了对观察者的支持功能 被观察者Observable对象,提供add/delete/notifyObserver()和setChanged()设置状态方法 观察者Observer接口,提供update()方法进行相关的更新操作. 观察者类图: 以下程序模拟