CSU 18032016

Posted _Mashiro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSU 18032016相关的知识,希望对你有一定的参考价值。

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803

Solution:

考虑两个数x,y乘积%2016=0

x×y≡0(MOD 2016)

x=p1×2016+q1

y=p2×2016+q2

x×y=(p1×2016+q1)×(p2×2016+q2)=2016^2×p1p2+2016(p1q2+q1p2)+p1p2≡0(MOD 2016)

实际上就转化为余数乘积取模=0,预处理没两个余数乘积是否mod2016=0

统计答案两个余数出现的个数相乘即可(注意特判0不能选)

复杂度:O(2016^2)

// <1803.cpp> - Wed Oct 19 08:25:53 2016
// This file is made by YJinpeng,created by XuYike‘s black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don‘t know what this program is.

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#define MOD 2016
#define src(x,n) (n/MOD+(x!=0?(n%MOD>=x):0))
using namespace std;
typedef long long LL;
vector<pair<int,int> >a;
int main()
{
    freopen("1803.in","r",stdin);
    freopen("1803.out","w",stdout);
    for(int i=0;i<MOD;i++)
        for(int j=0;j<MOD;j++)
            if((i*j)%MOD==0)
                a.push_back(make_pair(i,j));
    int n,m,to=a.size();
    while(~scanf("%d%d",&n,&m)){
        LL ans=0;
        for(int i=0;i<to;i++)
            ans+=1LL*src(a[i].first,n)*src(a[i].second,m);
        printf("%lld\n",ans);
    }
    return 0;
}

 

以上是关于CSU 18032016的主要内容,如果未能解决你的问题,请参考以下文章

csu oj 1804: 有向无环图 (dfs回溯)

CSU 1515 Sequence (莫队算法)

(线段树区间赋值)CSU 1942 - Sort String

CSU - 1556 Jerry&#39;s trouble(高速幂取模)

CSU 1592 石子归并(记忆化搜索 or 区间DP)

CSU 1541 There is No Alternative (最小生成树+枚举)