• 洛谷 P2158 [SDOI2008]仪仗队 && 洛谷 P1447 [NOI2010]能量采集


    https://www.luogu.org/problemnew/show/P2158

    以人所在位置为(0,0)建立坐标系,

    显然除了(0,1)和(1,0)外,可以只在坐标(x,y)的gcd(x,y)==1时统计贡献。。因为如果gcd(x,y)==g而g不等于1,那么会在(x/g,y/g)处统计贡献

    1要特判。。

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<vector>
     5 using namespace std;
     6 #define fi first
     7 #define se second
     8 #define mp make_pair
     9 #define pb push_back
    10 typedef long long ll;
    11 typedef unsigned long long ull;
    12 typedef pair<int,int> pii;
    13 #define N 100100
    14 ll prime[N+100],len,mu[N+100];
    15 bool nprime[N+100];
    16 ll n,ans;
    17 ll F(ll x)    {return (n/x)*(n/x);}
    18 int main()
    19 {
    20     ll i,j;
    21     mu[1]=1;
    22     for(i=2;i<=N;i++)
    23     {
    24         if(!nprime[i])    prime[++len]=i,mu[i]=-1;
    25         for(j=1;j<=len&&i*prime[j]<=N;j++)
    26         {
    27             nprime[i*prime[j]]=1;
    28             if(i%prime[j]==0)    {mu[i*prime[j]]=0;break;}
    29             else    mu[i*prime[j]]=-mu[i];
    30         }
    31     }
    32     scanf("%lld",&n);
    33     if(n==1)    {puts("0");return 0;}
    34     n--;
    35     for(i=1;i<=n;i++)    ans+=mu[i]*F(i);
    36     printf("%lld",ans+2);
    37     return 0;
    38 }

    https://www.luogu.org/problemnew/show/P1447

    一样的。。。

    答案就是$sum_{i=1}^nsum_{j=1}^m{(2*gcd(i,j)-1)}$

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<vector>
     5 using namespace std;
     6 #define fi first
     7 #define se second
     8 #define mp make_pair
     9 #define pb push_back
    10 typedef long long ll;
    11 typedef unsigned long long ull;
    12 typedef pair<int,int> pii;
    13 #define N 100000
    14 ll prime[N+100],len,mu[N+100];
    15 bool nprime[N+100];
    16 ll n,m,ans,a2;
    17 ll F(ll x)    {return (m/x)*(n/x);}
    18 int main()
    19 {
    20     ll i,j,k;
    21     mu[1]=1;
    22     for(i=2;i<=N;i++)
    23     {
    24         if(!nprime[i])    prime[++len]=i,mu[i]=-1;
    25         for(j=1;j<=len&&i*prime[j]<=N;j++)
    26         {
    27             nprime[i*prime[j]]=1;
    28             if(i%prime[j]==0)    {mu[i*prime[j]]=0;break;}
    29             else    mu[i*prime[j]]=-mu[i];
    30         }
    31     }
    32     scanf("%lld%lld",&n,&m);
    33     if(n>m)    swap(n,m);
    34     for(k=1;k<=m;k++)
    35     {
    36         a2=0;
    37         for(i=1;i<=m/k;i++)
    38             a2+=mu[i]*F(i*k);
    39         ans+=a2*k;
    40     }
    41     printf("%lld",ans*2-n*m);
    42     return 0;
    43 }

    http://210.33.19.103/contest/776/problem/2

    完全不会。。

  • 相关阅读:
    Java 开发环境配置
    kettle脚本定时任务不执行
    python 列表之队列
    tensorflow训练过程中内存溢出
    关于 numpy.array和list之间的转换
    vscode 小笔记
    【python2/3坑】从gensim的Word2Vec.load()的中文vector模型输出时显示unicode码
    WingIDE用法笔记
    numpy.ndarray类型的数组元素输出时,保留小数点后4位
    tensorboard 用法
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9334918.html
Copyright © 2020-2023  润新知