隊內排位賽(一)

2021-10-03 02:22:10 字數 3053 閱讀 5556

題目:

題目大意:

有n頭牛,每頭牛有k個屬性,以及它們在每個屬性的排名,求有多少對牛,使其中一頭牛的每個屬性排名都高於另外一頭牛

題目分析:

因為n、k很小,直接暴力列舉

**

#include

using

namespace std;

int n,k;

struct cow

cow[50]

;bool

check

(int x,

int y)

intmain()

int ans =0;

for(

int i =

1; i <= n;i++

)for

(int j =

1; j <= n;j++)if

(i!=j&&

check

(i,j)

) ans ++

; cout << ans;

return0;

}

題目大意:

求第n個能被3或5整除的正整數。

題目分析:

顯然能被3或5整除的數是以15為乙個週期分布的。

**:

#include

using

namespace std;

typedef

long

long ll;

ll n;

intmain()

; ans = ans + d[n%8]

;if(n %8==

0)cout<<

(n/8)*

15-1;

else cout << ans;

return0;

}

題目大意:

給你乙個只有m個小寫字母的字串ch(a=1,b=2,…,z=26),長度為n,給出修改i為j的代價a[i][j],要求你修改該字串,使得對於任意i,x,y(0<=x=k(ch[0]=ch[n+1]=0)。

題目分析

首先需要求把i修改為j的最小代價,這個可以用floyd演算法直接求出

然後因為涉及到最優子結構,想到了動規。

不難想出若定義f[i][j]為對於前i個字母的字串,修改後第i個字母為j的最小代價。而狀態轉移的大概思路就是對於第i個字母,有兩個選擇:

1.開闢一段新的字母:f[i][j] = min( f[i-k][t] + a[ch[i-k+1]][j]+a[ch[i-k+2]][j]+…+a[ch[i]][j] )(1<=t<=m)

2.跟隨上乙個字母:f[i][j] = f[i-1][j] + a[ch[i]][j];

而這種時間複雜度為o(mn2)顯然不能接受

而對於o(n)操作: a[ch[i-k+1]][j]+a[ch[i-k+2]][j]+…+a[ch[i]][j] 顯然可以用字首和陣列s[i][j] (前i個字母全部修改為j的代價)來優化變為o(1)

最後時間複雜度就為o(mn)了

**

#include

using

namespace std;

typedef

long

long ll;

const

int n =

1e5+

10, m =40;

ll a[m]

[m],s[n]

[m],m,n,k,f[n]

[m];

char ch[n]

;int

main()

ll ans =-1

;for

(int i =

1; i <= m; i ++)if

(ans==-1

||ans>f[n]

[i])ans = f[n]

[i];

cout << ans;

return0;

}

題目大意:

有8頭牛排成一列,給定一些如a牛必須在b牛旁的限制,求字典序最小的排列

題目解析:

因為牛很少,所以直接dfs一波就過了

**

#include

using

namespace std;

typedef

long

long ll;

ll n;

string cow[8]

=;int a[8]

=;int lim[

100][2

],ans[10]

;bool st[10]

;void

dfs(

int now,

bool

&flag)

for(

int i =

0; i <8&&

!flag; i ++)if

(!st[i]

&&flag ==

false)}

intmain()

}bool flag =

false

;dfs(0

,flag)

;for

(int i =

0; i <

8; i ++

)for

(int j =

0; j <

8; j++)if

(ans[j]

==i)cout << cow[j]

<< endl;

return0;

}

題目大意:

給你乙個由大寫字母組成的字串,求最小k,使得在任何連續k個字母中能唯一確定這k個字母的位置

題目分析:

暴力列舉k!!!

**

#include

using

namespace std;

char s[

110]

;int n;

bool

check

(int x,

int y,

int k)

intmain()

}}

排位賽一 E Milk Visits

farmer john 計畫建造 n 個農場,用 n 1 條道路連線,構成一棵樹 也就是說,所有農場之間都互相可以到達,並且沒有環 每個農場有一頭奶牛,品種為更賽牛或荷斯坦牛之一。farmer john 的 m 個朋友經常前來拜訪他。在朋友 i 拜訪之時,farmer john 會與他的朋友沿著從農...

排位賽題解

十進位制轉二進位制,右移 與 運算結合,遍歷每個數字在二進位制下點每一位。include intmain for int i 0 i 4 i for int i 0 i 4 i a i 1 右移除2 printf d d d d n num 0 num 1 num 2 num 3 return0 題...

排位賽二G Bucket Brigade

給定乙個10x10的地圖,b是倉庫,l是湖泊,是路,r是石頭 石頭不能走 現在倉庫著火了,母牛哥要去救火了,求倉庫到湖泊的最小步數 倉庫和湖泊不算入步數 bfs模板題。include include include include include include using namespace st...