全部评论
消消乐的代码,我第二题是消消乐,第一题是字母转换,不太一样.发一下第二题的. 第一题的找不到了..我直接删掉了 #include<bits/stdc++.h>
using namespace std;
int helper(vector<vector<int>>&nums, int i, int j)
{
int ret = 1;
int cur = nums[i][j];
if (i < 0 || j < 0 || i >= 5 || j >= 5 || nums[i][j] == 0)
return 0;
nums[i][j] = 0;
if (i >= 1 && nums[i - 1][j]==cur)
{
ret += helper(nums, i - 1, j);
}if (j >= 1 && nums[i][j - 1] == cur)
{
ret += helper(nums, i, j - 1);
}if (i <= 3 && nums[i + 1][j] == cur)
{
ret += helper(nums, i + 1, j);
}
if (j <= 3 && nums[i][j + 1] == cur)
{
ret += helper(nums, i, j + 1);
}
return ret;
}
// 消除并且把上面的落下来
void funcDrop(vector<vector<int>>&nums, int i, int j)
{
for (int j = 0;j < 5; j++)
{
int count = 4;
for (int i = 4; i >= 0; i--)
{
if (nums[i][j] != 0)
{
nums[count--][j] = nums[i][j];
}
}
for (int i = count; i >= 0; i--)
{
nums[i][j] = 0;
}
}
return;
}
int func(vector<vector<int>>&nums)
{
int ret = INT_MAX;
vector<vector<int>>tmp = nums;
int tag = 1;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
tmp = nums;
// 假设点击这个
int count = helper(tmp, i, j);
if (count >= 3)
{
// 吧当前消除并且上面的落下来...
funcDrop(tmp, i, j);
ret = min(ret, func(tmp));
tag = 0;
}
}
}
// 表示当前的矩阵不能在消除了
if (tag)
{
int count = 0;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (nums[i][j] != 0)
{
count++;
}
}
}
return count;
}
return ret;
}
int main()
{
vector<vector<int>>nums(5, vector<int>(5, 0));
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
cin >> nums[i][j];
}
}
cout << func(nums) << endl;
return 0;
}
tql 消消乐怎么做
第二题最后提交了93.7的时候 时间截止了 我测试样例是过了 很痛苦
我这里没有代码了, 我没保存 不是我不分享啊 我是真的就在赛码的网页里写的 没用自己的ide
36 100
求大佬给第一题代码
大佬求分享思路
大佬们跪求代码
0 第二题dfs a了个样例超时了🤨
可以发下代码不?说下思路也行😂
package BISHI; import java.util.Arrays; import java.util.Scanner; /** * 合唱队的N名学生站成一排且从左到右编号为1到N,其中编号为i的学生身高为Hi。 现在将这些学生分成若干组(同一组的学生编号连续), * 并让每组学生从左到右按身高从低到高进行排列,使得最后所有学生同样满足从左到右身高 从低到高(中间位置可以等高),那么最多能将这些学生分成多少组? * 合唱队的N名学生站成一排且从左到右编号为1到N,其中编号为i的学生身高为Hi。 现在将这些学生分成若干组(同一组的学生编号连续), * 并让每组学生从左到右按身高从低到高进行排列,使得最后所有学生同样满足从左到右身高从低 到高(中间位置可以等高),那么最多能将这些学生分成多少组? * 第一行包含一个整数N,1≤N≤10^5。 * * 第二行包含N个空格隔开的整数H1到HN,1≤Hi≤10^9。 4 2 1 3 2 * * @author gary * */ public class test4 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int n = scanner.nextInt(); int[] a = new int[n]; int[] b = new int[n]; for (int i = 0; i < a.length; i++) { a[i] = scanner.nextInt(); b[i] = a[i]; } Arrays.sort(b); int ans = 0; int cha = 0; int index = 0; for (int i = 0; i < b.length; i++) { if (a[i] == b[i]) { ans++; } else { if (cha == 0) { index = i; // System.out.println(index); } for (int j = index; j < b.length; j++) { if (a[i] == b[j]) { System.out.println(j-i); cha += j - i; if (cha == 0) { ans+=i-index+1; } break; } } } } System.out.println(ans); } } }
第一题是不是回溯可以弄出来
print(3) 36%
大佬分享下代码😫
求第一题思路
求第一题思路,大佬
楼主发下第一题答案
第一题求思路
第一题求思路
第一题求思路
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
03-12 12:16
西安工业大学 C++ 点赞 评论 收藏
分享
昨天 02:36
Imperial College London 集成电路IC设计 点赞 评论 收藏
分享