2019FJUT第一場周賽 題解

2021-09-27 12:09:54 字數 3943 閱讀 8303

a

先用全排列打了個表

可以發現有三個小數部分是0.66667,也就是2/3,這樣子看不出來什麼,我們把後者乘個3,都變成正整數看看

數感好的可以直接看出來 ans=n*n-1,那麼答案也就是ans/3.0

數感差的(本人) 只能看出來是個遞推式 ans[i]=ans[i-1]+2*i-1

#include

using namespace std;

typedef

long

long ll;

double a[

105]

;voiddb(

) ll ans=1;

for(ll k=

1; k<=i; k++

) ans*

=k; cout<<

"n="

<

" ans="

<

intmain()

return0;

}

bans= a^ b

如我們求ans的長度時候如果是k進製,直接logk(ans)+1

比如ans=8 我們要求2進製下的長度就是 log2(8)+1=4 8的二進位制值為1000 顯然正確

但是我們知道在c/c++中log的底只有2 ,e,10,所以這裡用一下換底公式即可

ans=logk(ans)=b * logk(a)=b * ( log(a) / log(k) )

故答案即為ans+1

///8 2 2 -> 7

#include

using namespace std;

typedef

long

long ll;

intmain()

return0;

}

c看到遞推式以及範圍,矩陣快速冪無疑了,

並且是乙個模板題

如果n<10 直接輸出n%k

n>=10 跑矩陣快速冪即可

簡單構造一下矩陣

初始狀態是

【f9 f8 f7 f6 f5 f4 f3 f2 f1 f0】

構造的矩陣為

a0   1     0     0    0    0     0    0   0    0

a1 0 1 0 0 0 0 0 0 0

a2 0 0 1 0 0 0 0 0 0

a3 0 0 0 1 0 0 0 0 0

a4 0 0 0 0 1 0 0 0 0

a5 0 0 0 0 0 1 0 0 0

a6 0 0 0 0 0 0 1 0 0

a7 0 0 0 0 0 0 0 1 0

a8 0 0 0 0 0 0 0 0 1

a9 0 0 0 0 0 0 0 0 0

#include

using namespace std;

typedef

long

long ll;

#define me(a) memset(a,0,sizeof a)

ll mod,n;

struct node

qq;node jz

(node a,node b)

now.a[i]

[j]=x%mod;}}

return now;

}void

qsm(ll n)

cout<

[0]%mod<

}int

main()

return0;

}

d找出第乙個比給定的數大的下標,直接暴力肯定t,因此直接線段樹維護區間最大值即可。

當查詢的k大於整個序列的最大值時候,直接輸出no response

#include

using namespace std;

typedef

long

long ll;

ll n,m;

struct node

t[4*100005];

int f=0;

void

build

(ll s,ll l,ll r)

ll mid=

(l+r)

>>1;

build

(s*2

,l,mid)

;build

(s*2+1

,mid+

1,r)

; t[s]

.maxn=

max(t[s*2]

.maxn,t[s*2+

1].maxn);}

ll query

(ll s,ll k)

void

updata

(ll s,ll x,ll y)

ll mid=t[s]

.l+t[s]

.r>>1;

if(x<=mid)

updata

(s*2

,x,y)

;else

updata

(s*2+1

,x,y)

; t[s]

.maxn=

max(t[s*2]

.maxn,t[s*2+

1].maxn);}

intmain()

else

}return0;

}

e四個for會t,看資料範圍不超過1e6,可以用陣列標記來優化掉乙個for,

三個for列舉前三個數,看是不是有他們的乘積,要注意的是,前面用過的數要刪去,不然會重,而且選中的三個數要刪去,並且要在迴圈後補回來,結果炸int。

舉個簡單的小資料

51 1 1 1 1

答案應該是5

1 2 3 4

1 2 3 5

1 2 4 5

1 3 4 5

2 3 4 5

上面數字指下標

#include

using namespace std;

typedef

long

long ll;

ll v[

1000005];

ll a[

1000005];

intmain()

ll num=0;

for(

int i=

1;i<=n;i++

)for

(int l=j+

1;l<=n;l++

) v[a[l]]++

;}for(

int l=i+

1;l<=n;l++

) v[a[l]]++

;}cout<

return0;

}

暑期第一場題解

此題,emmmm,有毒,很容易出現各種bug,還是自己菜,不能動不動就覺得是資料有問題,此題肯定要用字串,模擬的題,有點長 蒟蒻瑟瑟發抖 不過不難理解,仔細看看就明白了,主要是細節方面的處理 include include include includeusing namespace std int...

寒假第一場個人賽題解

include using namespace std typedef long long ll int t ll a,b,ans,x intmain ac include using namespace std const int n 1e5 7 char sr n int main if a b...

2019 假期第一場(2019 1 14)

description input input contains two integers n,m 1 n 1000,0 m 10 output output the answer in a single line.sample input 10 0sample output 10題意 求 思路 同...