2018湖南省赛B题“2018”

题面懒得敲了,反正看这篇博客的肯定知道题面。

比赛时想按约数的一些性质分情况讨论出公式然后在合并,结果单考虑矩阵里出现2018和1009(与2互质,1009出现次数等于2)出现的情况就写了一长串公式,还推了很久。在考虑1出现的综合情况就直接GG了。。

然后想到打表,奈何队友卡H题很久,最终因时间原因放弃来做B的时候已经冷静不下来了,没能打表成功,于是今天决定补一手打表。

我首先敲了dfs暴搜二维数组的,然后类比的(找了半天BUG)终于成功打出来了。。还是要好好练练打表,比赛卡这样的题真难受。

 1 #include<cstdio>
 2 #define ll long long
 3 ll tot;
 4 int a[]={2018, 1009 , 2, 1};
 5 int m[100][100];
 6 int n,k;
 7 inline int gcd(int a,int b){return b?gcd(b,a%b):a;}
 8 void dfs(int x,int y)
 9 {
10     if(x>=n){tot++;return ;}
11     for(int j=0;j<4;j++)
12     {
13         if(x>0&&gcd(m[x-1][y],a[j])!=a[j])continue;
14         if(y>0&&gcd(m[x][y-1],a[j])!=a[j])continue;
15         m[x][y] = a[j];
16         if(y+1==k)dfs(x+1,0);
17         else dfs(x,y+1);
18         if(!x&&!y)break;
19     }
20 }
21 int main()
22 {
23     while(~scanf("%d%d",&n,&k)){
24         tot = 0;
25         dfs(0,0);
26         printf("tot: %lld\n",tot);
27     }
28     return 0;
29 }

 

posted @ 2018-09-04 22:13  llllrj  阅读(366)  评论(0编辑  收藏  举报