蒜頭君的兔子
題意:有個姓蒜的第一年有1對兔子,兔子到第二年之後每年會生一對兔子,到十歲的時候就會gg,為n年後有幾隻兔子。
我一開始是直接維護了乙個0~10的陣列,分別表示0~10歲的兔子分別有多少個,每次暴力轉移。
**:
#includeusing namespace std;
const int mod = 1000000007;
long long s,n,a[1000005];
int main()
for(int j=10;j>1;j--) s=(s+a[j])%mod;
a[0]=s;
} s=0;
for(int i=0;i<10;i++) s=(s+a[i])%mod;
cout《然而好像超時了。
那麼我們想想怎麼優化,嗯沒錯,我們偉大的矩陣快速冪。
為此,我手寫了乙個11*11的矩陣(因為0~10共有11個數)。
跑起來飛快。
**:#includeusing namespace std;
const int mod = 1000000007;
struct matrix ;
matrix matrix_mul(matrix a, matrix b) }}
return c;
}matrix unit() else }}
return res;
}matrix matrix_pow(matrix a, int n)
temp = matrix_mul(temp, temp);
}return res;
}int x,y,k,n,m;
int main()
;// a.a[1]=;
// a.a[2]=;
// a.a[3]=;
// a.a[4]=;
// a.a[5]=;
// a.a[6]=;
// a.a[7]=;
// a.a[8]=;
// a.a[9]=;
// a.a[10]=;//純手打矩陣……快瘋掉了,好在沒出現細節錯誤,不然會調到屎的。
a.a[0][0]=0;a.a[0][1]=1;a.a[0][2]=1;a.a[0][3]=1;a.a[0][4]=1;a.a[0][5]=1;a.a[0][6]=1;a.a[0][7]=1;a.a[0][8]=1;a.a[0][9]=1;a.a[0][10]=0;
a.a[1][0]=1;a.a[1][1]=0;a.a[1][2]=0;a.a[1][3]=0;a.a[1][4]=0;a.a[1][5]=0;a.a[1][6]=0;a.a[1][7]=0;a.a[1][8]=0;a.a[1][9]=0;a.a[1][10]=0;
a.a[2][0]=0;a.a[2][1]=1;a.a[2][2]=0;a.a[2][3]=0;a.a[2][4]=0;a.a[2][5]=0;a.a[2][6]=0;a.a[2][7]=0;a.a[2][8]=0;a.a[2][9]=0;a.a[2][10]=0;
a.a[3][0]=0;a.a[3][1]=0;a.a[3][2]=1;a.a[3][3]=0;a.a[3][4]=0;a.a[3][5]=0;a.a[3][6]=0;a.a[3][7]=0;a.a[3][8]=0;a.a[3][9]=0;a.a[3][10]=0;
a.a[4][0]=0;a.a[4][1]=0;a.a[4][2]=0;a.a[4][3]=1;a.a[4][4]=0;a.a[4][5]=0;a.a[4][6]=0;a.a[4][7]=0;a.a[4][8]=0;a.a[4][9]=0;a.a[4][10]=0;
a.a[5][0]=0;a.a[5][1]=0;a.a[5][2]=0;a.a[5][3]=0;a.a[5][4]=1;a.a[5][5]=0;a.a[5][6]=0;a.a[5][7]=0;a.a[5][8]=0;a.a[5][9]=0;a.a[5][10]=0;
a.a[6][0]=0;a.a[6][1]=0;a.a[6][2]=0;a.a[6][3]=0;a.a[6][4]=0;a.a[6][5]=1;a.a[6][6]=0;a.a[6][7]=0;a.a[6][8]=0;a.a[6][9]=0;a.a[6][10]=0;
a.a[7][0]=0;a.a[7][1]=0;a.a[7][2]=0;a.a[7][3]=0;a.a[7][4]=0;a.a[7][5]=0;a.a[7][6]=1;a.a[7][7]=0;a.a[7][8]=0;a.a[7][9]=0;a.a[7][10]=0;
a.a[8][0]=0;a.a[8][1]=0;a.a[8][2]=0;a.a[8][3]=0;a.a[8][4]=0;a.a[8][5]=0;a.a[8][6]=0;a.a[8][7]=1;a.a[8][8]=0;a.a[8][9]=0;a.a[8][10]=0;
a.a[9][0]=0;a.a[9][1]=0;a.a[9][2]=0;a.a[9][3]=0;a.a[9][4]=0;a.a[9][5]=0;a.a[9][6]=0;a.a[9][7]=0;a.a[9][8]=1;a.a[9][9]=0;a.a[9][10]=0;
a.a[10][0]=0;a.a[10][1]=0;a.a[10][2]=0;a.a[10][3]=0;a.a[10][4]=0;a.a[10][5]=0;a.a[10][6]=0;a.a[10][7]=0;a.a[10][8]=0;a.a[10][9]=1;a.a[10][10]=0;
a=matrix_pow(a,n-1);
long long ans=0;
for(int i=0;i<10;i++) ans=(ans+a.a[i][1])%mod;
printf("%d",ans);
return 0;
}
perfect! 蒜頭君面試 計蒜客
蒜頭君來蒜廠面試的時候,曾經遇到這樣乙個面試題 給定 n nn 個整數,求裡面出現次數最多的數,如果有多個重複出現的數,求出值最大的乙個。當時可算是給蒜頭君難住了。現在蒜頭君來考考你。輸入格式 第一行輸入乙個整數 n 1 n 100000 n 1 le n le 100000 n 1 n 1000 ...
計蒜客 蒜頭君倒水
問題描述 蒜頭君倒了 2 杯熱水在杯子裡面,第一杯裡面有 a 毫公升,第二杯裡面有 b 毫公升。水太熱了,蒜頭君決定通過輪流倒水的方式來讓水冷下來。每次倒水蒜頭君把第一杯的 x 的水倒入第二杯,把第二杯的 y 的水倒入第一杯 蒜頭君有奇特的方法,能讓這一過程是同是發生的,沒有先後之分 蒜頭君一直重複...
計蒜客 蒜頭君回家
樣例輸入 8 10 p.p t s 樣例輸出 思路用兩次bfs,第一次計算出起點到p的距離,第二次計算出t到p的距離,然後迴圈取最小值。但是wa了很多次,找了很久,發現是vis判斷的問題,導致乙個資料更新多次。ac include include include include using name...