zoukankan      html  css  js  c++  java
  • 2017.3.11[codevs1937]【NOI2010】能量采集

    题解:https://www.zybuluo.com/jesseliu612/note/668669

     1 #include<cmath>
     2 #include<queue>
     3 #include<cstdio>
     4 #include<vector>
     5 #include<cstdlib>
     6 #include<cstring>
     7 #include<iostream>
     8 #include<algorithm>
     9 #define N 100010
    10 #define RG register
    11 #define inf 0x3f3f3f3f
    12 #define Inf 99999999999999999LL
    13 using namespace std;
    14 typedef long long LL;
    15 bool vis[N];
    16 LL ans,anss,fix[N];
    17 int n,m,loc,top,nowloc,mu[N],pre[N],sta[N];
    18 inline int Abs(RG const int &a){return a>0?a:-a;}
    19 inline int Max(RG const int &a,RG const int &b){return a>b?a:b;}
    20 inline int Min(RG const int &a,RG const int &b){return a>b?b:a;}
    21 inline int gi(){
    22     RG int x=0;RG bool flag=0;RG char c=getchar();
    23     while((c<'0'||c>'9')&&c!='-') c=getchar();
    24     if(c=='-') c=getchar(),flag=1;
    25     while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
    26     return flag?-x:x;
    27 }
    28 inline void init(){
    29     mu[1]=pre[1]=1;
    30     for (RG int i=2;i<=n;++i){
    31     if(!vis[i]){
    32         mu[i]=-1;   
    33         sta[++top]=i;
    34     }
    35     for (RG int j=1;j<=top&&i*sta[j]<=n;++j){
    36         vis[i*sta[j]]=1;
    37         if(i%sta[j]==0){
    38         mu[i*sta[j]]=0;
    39         break;
    40         }
    41         mu[i*sta[j]]=-mu[i];
    42     }
    43     pre[i]=pre[i-1]+mu[i];
    44     }
    45 }
    46 inline void coc(RG int aa,RG int bb){
    47     anss=0;
    48     for (RG int i=1;i<=aa;i=loc+1){
    49     loc=Min(aa/(aa/i),bb/(bb/i));
    50     anss+=(LL)(pre[loc]-pre[i-1])*(LL)(aa/i)*(LL)(bb/i);
    51     }
    52 }
    53 inline void work(){
    54     n=gi();m=gi();
    55     if(n>m) swap(n,m);
    56     init();
    57     for (RG int i=1;i<=n;++i)
    58         fix[i]=fix[i-1]+i;
    59     for (RG int i=1;i<=n;i=nowloc+1){
    60     coc(n/i,m/i);
    61     nowloc=Min(n/(n/i),m/(m/i));
    62     ans+=(fix[nowloc]-fix[i-1])*anss;
    63     }
    64     printf("%lld
    ",ans*2-(LL)n*m);
    65 }
    66 int main(){
    67     work();
    68     return 0;
    69 }
    View Code
  • 相关阅读:
    使用 C# 2008 Express Edition 编写的猜数字游戏
    话说三层
    在asp.net 1.1 中使用Ajax
    vs2005 调试时出现“无法附加。绑定句柄无效”的解决办法
    解决“你可能没有权限使用网络资源”的问题
    html&js 在firefox与IE中呈现存在差异的解决方法总结
    sql 事务 全攻略
    mssql的TSQL教程(从建登陆到建库、表和约束)(1)
    数据库练习题
    用批处理附加数据库
  • 原文地址:https://www.cnblogs.com/Super-Nick/p/6536449.html
Copyright © 2011-2022 走看看