zoukankan      html  css  js  c++  java
  • bzoj 2190: [SDOI2008]仪仗队

    Description

    作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。 现在,C君希望你告诉他队伍整齐时能看到的学生人数。
    此处输入图片的描述

    solution

    正解:容斥
    SBT,一直没看懂题意纠结了半天,原来只是因为(1,1)不需要算进去
    (f[i])(gcd(a,b)=i) 的数对((a,b))个数

    [f[i]=(n/i)*(n/i)-sum_{i|j}f[j] ]

    观察图片,答案要加上((1,2))((2,1))两个位置

    #include <algorithm>
    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    #define RG register
    using namespace std;
    typedef long long ll;
    int f[40005];
    void work()
    {
    	int n;
    	cin>>n;
    	n--;
    	for(int i=n;i>=1;i--){
    		f[i]+=(n/i)*(n/i);
    		for(int j=i+i;j<=n;j+=i)f[i]-=f[j];
    	}
    	cout<<f[1]+2<<endl;
    }
    
    int main()
    {
    	work();
    	return 0;
    }
    
    
  • 相关阅读:
    顾问和注解
    正则
    GitHub 的简单使用
    JavaScript变态题目
    常用的Javascript设计模式
    HTML5 本地裁剪上传图片
    webpack 打包
    详解js闭包
    常用的Javascript设计模式
    call appiy
  • 原文地址:https://www.cnblogs.com/Yuzao/p/8094237.html
Copyright © 2011-2022 走看看