51Nod 1024 矩阵中不重复的元素 | 技巧 数学

first try:

set<LL> sset;
int main()
{
    LL m,n,a,b;
    while(~scanf("%lld%lld%lld%lld",&m,&n,&a,&b)){
        LL tt;
        for(int i=0;i<n;i++){
            tt=a;
            for(int j=0;j<m;j++){
                sset.insert((LL)pow((tt++),b));
            }
            b++;
        }
        printf("%d
",sset.size());

    }
    return 0;
}

wrong

second try:

数非常大,考虑将数缩小,因为他是指数的,所以我们可以取一个对数

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define rep(i,a,n) for(int i = a; i < n; i++)
#define repe(i,a,n) for(int i = a; i <= n; i++)
#define per(i,n,a) for(int i = n; i >= a; i--)
#define clc(a,b) memset(a,b,sizeof(a))
#define INF 1e18+100
#define N 110
typedef long long LL;

set <double> s;
int main()
{
    int m, n, a, b;
    while(cin>>m>>n>>a>>b)
    {
        s.clear();
        for(int i=a; i<a+n; i++)
        {
            for(int j=b; j<b+m; j++)
            {
                s.insert(1.0*j*log2(1.0*i));
            }
        }
        cout<<s.size()<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/kimsimple/p/7465704.html