a : a - a very hard question
b : linear algebra test
d : dice game
e : the architect omar
f : building numbers
h : eyad and math
i : move between numbers
k : malek and summer semester
a : a very hard question
並不想寫題解,看懂題意就完事了
#include using namespace std;
int main()
return 0;
}
b : linear algebra test
題目大意:就是給n個矩陣的行列情況,問哪些矩陣可以相乘。
解題思路:沒別的,要加快查詢的速度,所以使用map儲存,找的很快。
#include using namespace std;
maprow,col;
long long fun(long long a,long long b)
int main()
printf("%lld\n",sum);
}return 0;
}
d : dice game
題目大意:給出骰子的六面,骰子沒滾動一次加上朝上面的數字,問加到n,最少需要滾動多少步,每次骰子從1滾動,滾動只能有90°。
題目解析:小於12的點數可以直接搞定,大於12的點數,每次都1->5->6就可以最快,找找規律就好了。
#include#include#includeusing namespace std;
#define ll long long
const int maxn=100005;
int a[25]=;
int main()
if(n==7)
ans-=1;
ans+=a[n];
cout題目大意:題目給定了四個字串,要在其他的字串中找出來,並且只會出現在頭幾個字元。
題目解析:所以很簡單的。匹配字串,統計數量,按題目要求分類就好了。
#include using namespace std;
char str[3][10] = ;
char s[55];
bool fun1(char *s1,char *s2)
}int minn = ans[0];
if(ans[1]f : building numbers
題目大意:給t組輸入,每組第一行給兩個數字n和q,接下來是一行n個數字,,然後是q行的詢問,每行詢問兩個數字,l和r,代表範圍。n行數字的每乙個數字可以有兩種方式從1遞增產生,如8可以1->2->4->8;如11可以1->2->4->8->9->10->11,但是有更快的方式1->2->4->5->10->11,只有五步就可以完成11的遞增。所以找到給定的範圍[l,r]內的數字最小的遞增次數和。
解題思路:
第一的問題:對單個數字而言怎麼才是最小的遞增次數。答案是多乘2,所以對這個數字,我們盡可能的去除以2,不能除以2就要加以,倒過來考慮是最好的,這是因為在遞增過程中,最接近目標數字的時候乘以二的增大效果是最明顯的,所以格外的需要乘以二。因此倒過來考慮,n不斷的除以二,不能除2的時候才減去1。這樣子的接近速度明顯是最優秀的。
第二個問題,這個問題的解非常的需要時間,所以一般的解法會超時,因為不斷地選擇區間,導致白白的多求了很多遍重複的解。所以我們使用字首和的技巧。比如對下列數:a1,
a2,.
..,a
i,..
.,an
a_1,a_2,...,a_i,...,a_n
a1,a2
,..
.,ai
,..
.,an
;我們假如用,計算出每乙個a
ia_i
ai的解d
id_i
di ,那麼我們定義s
is_i
si為∑k=
1idi
\sum_^
∑k=1i
di那麼任意的區間段的和我們都可以用s的差來表示,如[l,r],等於sr−
sl−1
s_r-s_
sr−sl
−1;這樣子只需要o(n
)o(n)
o(n)
的時間複雜度就可以找到任意區間段的和。
#include using namespace std;
const int maxn = 1e5+5;
long long a[maxn],ans[maxn];
long long fun(long long a)
return ans;
}int main()
ans[0] = 0;
for(int i=1;i<=n;i++)
ans[i]=fun(a[i])+ans[i-1];
int r,l;
for(int i=0;ih : eyad and math
題目大意:比較a
ba^b
ab和c
dc^d
cd誰比較大。
解題思路:直接算大小是不可能的,運算超時,所以兩邊同時取對數。再比較。
#include using namespace std;
int main()
return 0;
}
k : malek and summer semester
題目大意: 給一排數字大於50的是達標的,求達標率有沒有達到給定的值。
解題思路:水貨。
#include using namespace std;
int main()
if((double)sum/n >m){
cout<<"yes"《其他的題目沒有改。
第二次作業
execise02 1.查詢85年以後出生的學生姓名 性別和出生日期 2.列表顯示所有可能的學生選課組合 學號 課程號 3.查詢1 2 4班中陳姓同學的資訊 4.查詢所有及格的學生姓名 所選課程名及所得分數 5.統計各門課程的及格人數 課程編號 課程名 及格人數 6.統計各門課程的總人數 及格人數和...
第二次約會
第一次看來我沒把人家姑娘嚇壞,一周後的乙個星期一晚上,我迎來了和t第二次見面機會,那天我發了一條簡訊給t,今天晚上我們去外灘逛逛吧 t快下班的時候給我打了個 當時t和她的小朋友們都還在教室裡,t很爽快的答應我的邀請,並且叫他們班所有的 學生異口同聲在 的那端大聲叫 叔叔好!當時差點沒把我耳朵震聾,呵...
第二次作業
第一題 p1 1 遞迴寫法,效率低 include 1.寫乙個函式返回引數值為1的個數 比如 15 0000 1111 4個1 程式原型 int count one bits unsigned int value int fuc int x else return 0 void mainp1 p1 ...