UVA 11490 Just Another Problem

来源:互联网 发布:java acl权限控制 编辑:程序博客网 时间:2024/05/02 04:49

题意:S个士兵排成r行c列,其中队列中间有两个方队是空出来的,并且这两个方队大小相等,而且方队到四个方向外面的厚度都相同,求所有空出来的方队的情况。

思路:在纸上画一画就可以发现S可以写成这样的形式S=6*i*i+7*i*j。这样枚举i就行了。


代码:


#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<map>#include<queue>#include<stack>#include<cmath>#include<vector>#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define eps 1e-9#define pi acos(-1.0)using namespace std;typedef long long ll;const int mod=100000007;int main(){    //freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);    ll S;    while(~scanf("%lld",&S))    {        if(S==0) break;        int cnt=0;        ll i=1,tmp,tmp2,ans;        while(true)        {            tmp=i*i*6;            if(tmp>=S) break;            tmp2=(S-tmp)/7;            if((S-tmp)%7==0&&tmp2%i==0)            {                ans=tmp2/i;                cnt++;                ans%=mod;                ans=ans*ans%mod;                ans=ans*2%mod;                printf("Possible Missing Soldiers = %lld\n",ans);            }            i++;        }        if(!cnt) printf("No Solution Possible\n");        printf("\n");    }    return 0;}

0 0
原创粉丝点击