2018湖南省賽B題“2018”
阿新 • • 發佈:2018-09-05
amp class 放棄 打出 printf 決定 n) inline %d
題面懶得敲了,反正看這篇博客的肯定知道題面。
比賽時想按約數的一些性質分情況討論出公式然後在合並,結果單考慮矩陣裏出現2018和1009(與2互質,1009出現次數等於2)出現的情況就寫了一長串公式,還推了很久。在考慮1出現的綜合情況就直接GG了。。
然後想到打表,奈何隊友卡H題很久,最終因時間原因放棄來做B的時候已經冷靜不下來了,沒能打表成功,於是今天決定補一手打表。
我首先敲了dfs暴搜二維數組的,然後類比的(找了半天BUG)終於成功打出來了。。還是要好好練練打表,比賽卡這樣的題真難受。
1 #include<cstdio> 2 #define ll long long 3ll 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 }
2018湖南省賽B題“2018”