cf-215C-Crosses

来源:互联网 发布:分析结果与关系的算法 编辑:程序博客网 时间:2024/06/06 00:44
枚举a,b,d,然后根据a,b,d的值算出来C。
#include<string.h>#include<algorithm>#include<stdlib.h>#include<iostream>#include<stdio.h>#include<vector>#define INF 1000000#define LL __int64using namespace std;vector<int>vec;int maps[201][201];LL ans;int n,m,s;int qiu(int a,int b,int d){    int c;    int ss;    ss=s;    int ds;    if(d>=b)    {        if(ss%d==0&&(ss/d)>=a)        {            return ss/d;        }        else        {            ss=ss-a*b;            if(d-b&&ss%(d-b)==0)            {                c=ss/(d-b);                if(c<=a)return ss/(d-b);            }        }    }    else    {        ss=ss-a*b+a*d;        if(ss%d==0)        {            return ss/d;        }    }    return 0;}void dos(int a,int b,int c,int d){    int aa;    int bb;    aa=max(a,c);    bb=max(b,d);    ans+=(n-aa+1)*(m-bb+1);}void ffdos(int a,int b){    ans+=(n-a+1)*(m-b+1);}void fdos(int a,int b){    ans+=(((a+1)/2)*((b+1)/2))*(n-a+1)*(m-b+1);}int main(){    int i,j,k;    while(~scanf("%d%d%d",&n,&m,&s))    {        ans=0;        for(i=1;i<=n;i+=2)        {            for(j=1;j<=m;j+=2)            {                if(i*j>s)break;                if(i*j==s)                {                    fdos(i,j);                    continue;                }                for(k=1;k<=m;k+=2)                {                    int ss;                    ss=qiu(i,j,k);                    if(!ss)continue;                    if(ss>n||ss%2==0)continue;                    if(ss>=i&&k>=j)                    {                        ffdos(ss,k);                    }                    else dos(i,j,ss,k);                }            }        }        cout<<ans<<endl;    }    return 0;}


0 0
原创粉丝点击