CSUFT2023年春季第二次個人賽 題解

2021-08-17 17:24:33 字數 3185 閱讀 2358

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 ...