吉比特笔试好难
选择填空感觉还好就是基础和c(c都快忘光了。。。)
coding第一题easy
第二题就开始不会了,俩哥们从数组左右取数,可以取1-n个数,但只能取一边,问最终俩哥们差值最大
给了个例题[10 -100 -200 20] ans=90 看了半天才懂是a取10,b取20,a取-100,b取-200才行。不能贪心,直接麻
第三题捉精灵
图问题没错,但是好麻烦啊,我的想法先判断几个连通图,然后每个连通图找个最小切入点,然后遍历连通图并且和直接捉精灵的值相比较取最小。
更坑的是,要捉n-1只精灵,这个还没想到咋搞。。。
这也太难了吧,23题偷了10就交卷了呜呜呜😥
coding第一题easy
第二题就开始不会了,俩哥们从数组左右取数,可以取1-n个数,但只能取一边,问最终俩哥们差值最大
给了个例题[10 -100 -200 20] ans=90 看了半天才懂是a取10,b取20,a取-100,b取-200才行。不能贪心,直接麻
第三题捉精灵
图问题没错,但是好麻烦啊,我的想法先判断几个连通图,然后每个连通图找个最小切入点,然后遍历连通图并且和直接捉精灵的值相比较取最小。
更坑的是,要捉n-1只精灵,这个还没想到咋搞。。。
这也太难了吧,23题偷了10就交卷了呜呜呜😥
全部评论
看来只有我第一题都不会
第一题,排序重点是如何正确比较大小,
我用了递归来比较两个团队间排名。
type team struct {
name string
rank []int
}
func compare(a, b *team, start int) bool {
if start >= len(a.rank) {
return a.name < b.name
}
if a.rank[start] > b.rank[start] {
return true
} else if a.rank[start] < b.rank[start] {
return false
}
return compare(a, b, start+1)
}
// 排序
for i := 0; i < len(rank); i++ {
max := i
for j := i + 1; j < len(rank); j++ {
if compare(rank[j], rank[i], 0) {
max = j
}
}
rank[i], rank[max] = rank[max], rank[i]
}
第一题我用的python傻子方法,有点像进制,因为比赛场<1000,for循环每场,那么第一名直接1000的26次方+上次的,第二名1000的25次方+上一轮的...。保存在字典里,最后结果排序。 为啥能成功呢,主要是无论多少个第二名加起来也比不上一个第一名的值。我感觉用c会比较难,得long long long long...
第三题是最小生成树叭
第一题30%,但给的用例和脑测都没问题,搞不懂
三题都是0%
第一题咋做的,我模拟A了第二题
求问23题思路
同a第一题,第2题连第二个案列都不理解。第三题直接没有做的欲望了
笑死,做一半打游戏去了
痛苦😥
第三题dfs剪枝了还是超时,写了贼久就a了10
😓不知道为啥第一题就过了不到一半,还写了半天
第一题我写了一下,不知道能不能过,请大佬们看看
struct team
{
int index;
bool flag;
int BestMc;
int BestMcCount;
team(int i,bool f,int Mc,int McCount)
{
index = i;
flag = f;
BestMc = Mc;
BestMcCount = McCount;
}
};
bool cmp(team a, team b)
{
if(a.BestMc!=b.BestMc)
{
return a.BestMc<b.BestMc;
}
else if(a.BestMcCount != b.BestMcCount)
{
return a.BestMcCount>b.BestMcCount;
}
else
{
return a.index < b.index;
}
}
int main()
{
int n;
cin>>n;
vector<team> TM;
for(int i = 0 ; i < 26; i++)
{
TM.push_back(team(i,false,27,0));
}
string str;
for(int i = 0 ; i < n; i++ )
{
cin>>str;
int MC = 1;
for(int i = 0 ; i < str.size(); i++)
{
if(TM[str[i] - 'a'].BestMc == MC)
{
TM[str[i] - 'a'].BestMcCount++;
}
else if(TM[str[i] - 'a'].BestMc > MC)
{
TM[str[i] - 'a'].BestMc = MC;
TM[str[i] - 'a'].flag = true;
TM[str[i] - 'a'].BestMcCount = 1;
}
MC++;
}
}
sort(TM.begin(),TM.end(),cmp);
for(int i = 0 ; i < 26; i++)
{
if(TM[i].flag == true)
{
cout<<char(TM[i].index + 'a');
}
}
}
我不明白为什么第二题的第二个案例a不选20,然后b选10,a选-100,这样a的出来的结果不是更大吗?
第一题咋做啊
就我第一题不会是吧
第一题啥思路
三题10难绷
很离谱,我第一题用例全过了,但是提交就是0。第二题用dp就好了
相关推荐
点赞 评论 收藏
分享
05-25 10:45
西华大学 Java 
点赞 评论 收藏
分享