2019百度之星第二場初賽 A, B, C

2021-09-26 07:06:16 字數 2168 閱讀 5263

a、度度熊與數字

直接暴力列舉v的因子

找到答案之後對答案排一下序輸出即可;

#include #define ll long long

using namespace std;

const int maxn = 1005;

int arr[1000] = ;

int arrr[1000] = ;

int factor(int n)

}if (n == (num*num)) arr[count1++] = num;

arr[count1++] = n;

return count1;

}int main()

int ans = 1;

sort(arr, arr + cnt);

cnt = unique(arr, arr + cnt) - arr;

for(int i = 1; i < cnt; i++)

}printf("%d\n",ans);

for(int i = 0; i < ans - 1; i++)

printf("%d\n", arrr[ans - 1]);

}return 0;

}

b、度度熊與排列

從1-m列舉p,找到滿足第乙個字串的位置p,然後列舉剩下的所有串,判斷是否滿足這個p,如果滿足,由於是從小到大列舉,那麼一定是字典序最小的,p[i] 就是這個值,否則往後繼續找

#include #define ll long long

using namespace std;

const int maxn = 1e5 +10;

char a[30][55],b[30][55];

int p[55], vis[55];

int t, n, m, f;

int solve()

}if(flag) }}

if(!flag) return -1;

}return 1;

}int main()

memset(vis, 0, sizeof(vis));

int flag = solve();

if(flag == 1)

}else

puts("-1");

}return 0;

}

c、度度熊與表示式 1

判斷最終結果的每一位是否能夠被構造出來,能構造出來的話,就讓他構造一次,如果構造多次,按位異或可能會讓這一位變成0,由於數字1按位異或只會影響最後一位,所以我們不管最後一位,先把前面的位構造出來,剩下偶數個1異或 就是0,奇數個就是1

#include #define ll long long

using namespace std;

const int maxn = 3e6 +10;

char s[maxn];

int vis[30], t;

int main()

}cnt = 1;

}else cnt++;

}for(int j = 21; j > 0; j--)

}int ans = 0;

for(int i = 21; i > 0; i--)

ans += (len + 1 - ans) % 2;

printf("%d\n", ans);

}return 0;

}

百度之星 初賽第二場 B題

怎麼說呢,只能說自己還不夠熟練,能力還不夠,細心成都還不夠吧。這樣的二分題目在poj的訓練計畫裡面有類似的題目,自己也是都刷了,可是在調這道題目的時候廢了老大的盡了,比賽結束後聽polla的一句思路 找出最大的t,如果按t分類,可分出1組,按0分類分出n組,二分列舉t然後利用並查集判斷分出多少種類。...

百度之星 初賽第二場 B題

怎麼說呢,只能說自己還不夠熟練,能力還不夠,細心成都還不夠吧。這樣的二分題目在poj的訓練計畫裡面有類似的題目,自己也是都刷了,可是在調這道題目的時候廢了老大的盡了,比賽結束後聽polla的一句思路 找出最大的t,如果按t分類,可分出1組,按0分類分出n組,二分列舉t然後利用並查集判斷分出多少種類。...

2019百度之星初賽第二場 度度熊與排列

problem description 度熊有乙個機器,這個機器有乙個 1 m 的排列 p 1.m 當作引數,若丟進乙個長度為 m 的字串,此機器會將此字串重新排列後再輸出,重新排列的方式為 原本第 iii 個位置的字元會變到第 p i 個位置。舉例來說,當 m 3 p 1 3,p 2 1,p 3 ...