腾讯-客户端-第三次笔试(1,1,1,1,0.4)

希望能过笔试吧,第五道题FFT最远距离求代码。
其他四道代码奉上。

第一道:企鹅王国的电话号码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool isTrue(vector<char> s, int n){
	for (int i = 0; i < n; i++){
		if (s[i] == '8' && n - i >= 11)
			return true;
		else{
			continue;
		}
	}
	return false;
}
int main(){
	int t;
	cin >> t;
	for (int i = 0; i < t; i++){
		int n;
		cin >> n;
		vector<char> s(n);
		for (int i = 0; i < n ;i++)
			cin >> s[i];
		if (n < 11){
			cout << "NO" << endl;
		}
		else{
			if (isTrue(s, n))
				cout << "YES" << endl;
			else
				cout << "NO" << endl;
		}
	}
	//system("Pause");
	return 0;
}

第二道:使用红绿蓝,粉刷房屋
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int minValue(vector<vector<int>>& nums, int n){
	if (n <= 0 || nums.empty() || nums[0].empty())
		return 0;
	vector<vector<int>> dp(n, vector<int>(3, 0));
	dp[0][0] = nums[0][0];
	dp[0][1] = nums[0][1];
	dp[0][2] = nums[0][2];
	for (int i = 1; i < dp.size(); ++i){
		dp[i][0] = min(dp[i - 1][1] + nums[i][0], dp[i - 1][2] + nums[i][0]);
		dp[i][1] = min(dp[i - 1][0] + nums[i][1], dp[i - 1][2] + nums[i][1]);
		dp[i][2] = min(dp[i - 1][0] + nums[i][2], dp[i - 1][1] + nums[i][2]);
	}
	return min(min(dp[n - 1][0], dp[n - 1][1]), dp[n - 1][2]);
}
int main(){
	int n;
	cin >> n;
	vector <vector<int>> nums(n, vector<int>(3, 0));
	for (int i = 0; i < n; i++){
		cin >> nums[i][0];
		cin >> nums[i][1];
		cin >> nums[i][2];
	}
	cout << minValue(nums, n) << endl;
	//system("Pause");
	return 0;
}

第三道:排成圆圈,身高的最大差异最小
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
	int n;
	cin >> n;
	vector<int> nums(n);
	for (int i = 0; i < n; i++)
		cin >> nums[i];
	sort(nums.begin(), nums.end());
	vector<int>res;
	if (n % 2 == 0){
		for (int i = 0; i < n; i += 2){
			res.push_back(nums[i]);
		}
		for (int i = n - 1; i > 0; i -= 2){
			res.push_back(nums[i]);
		}
		for (int i = 0; i < n; i++){
			cout << res[i];
			i == n - 1 ? cout << endl : cout << " ";
		}
	}
	else{
		for (int i = 0; i < n; i += 2){
			res.push_back(nums[i]);
		}
		for (int i = n - 2; i > 0; i -= 2){
			res.push_back(nums[i]);
		}
		for (int i = 0; i < n; i++){
			cout << res[i];
			i == n - 1 ? cout << endl : cout << " ";
		}
	}
	//system("Pause");
	return 0;
}

第四道:木板刷漆
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
	int n;
	cin >> n;
	vector<int> nums(n);
	for (int i = 0; i < n; i++)
		cin >> nums[i];
	vector<int> temp(n);
	temp[0] = 0;
	int count = 0;
	for (int i = 1; i < n; i++){
		temp[i] = nums[i] - nums[i - 1];
		if (temp[i] != 0)
			count++;
	}
	count + 1 <= n ? cout << count + 1 << endl : cout << n << endl;
	//system("Pause");
	return 0;
}





#腾讯##笔试题目##C/C++##题解#
全部评论
第五题过了 明天早上面完试发。。已经上床关电脑了……楼主能说说第三题什么意思吗……我根本没看懂什么叫最大差异最小……
点赞 回复 分享
发布于 2019-09-21 02:15
楼主第四题求思路。。。 4 4 4 4 4不是应该输出4吗,好像你代码输出是1。。。如果本渣理解错了还请大佬指点😂
点赞 回复 分享
发布于 2019-09-21 03:13
第五题自己写的dp,写的很差,主要是快结束了想起来还有负距离最大这一个情况。。。所以直接复制了代码,仅供参考。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Tencent_5 {     class Program     {         static void Main(string[] args)         {             string s = Console.ReadLine();             int n=Convert.ToInt32(Console.ReadLine());             int[,,] dp = new int[s.Length, n + 1, 2];             for(int i=1;i<s.Length;i++)                 for(int j=0;j<n+1;j++)                 {                     dp[i, j, 0] = 0;                     dp[i, j, 1] = 0;                 }             if (s[0] == 'F')             {                                  for (int i = 0; i <= n; i++)                 {                     if (i % 2 == 1)                     {                         dp[0, i, 0] = 0;                         dp[0, i, 1] = -1;                     }                     else                     {                         dp[0, i, 0] = 1;                         dp[0, i, 1] = 1;                     }                 }             }             else             {                                  for (int i = 0; i <= n; i++)                 {                     if (i % 2 == 1)                     {                         dp[0, i, 0] = 1;                         dp[0, i, 1] = 1;                     }                     else                     {                         dp[0, i, 0] = 0;                         dp[0, i, 1] = -1;                                              }                 }             }             for (int i = 1; i < s.Length; i++)                 for (int j = 0; j <= n; j++)                     for (int k = 0; k <= j; k++)                     {                         if(s[i]=='F')                         {                             if((j-k)%2==0)                             {                                 if(dp[i-1,k,0]+ dp[i - 1, k, 1] > dp[i,j,0])                                 {                                     dp[i, j, 0] = dp[i - 1, k, 0] + dp[i - 1, k, 1];                                     dp[i, j, 1] = dp[i - 1, k, 1];                                 }                             }                             else                             {                                 if (dp[i - 1, k, 0] > dp[i, j, 0])                                 {                                     dp[i, j, 0] = dp[i - 1, k, 0];                                     dp[i, j, 1] = dp[i - 1, k, 1] * -1;                                 }                             }                         }                         else                         {                             if ((j - k) % 2 == 0)                             {                                 if (dp[i - 1, k, 0] > dp[i, j, 0])                                 {                                     dp[i, j, 0] = dp[i - 1, k, 0];                                     dp[i, j, 1] = dp[i - 1, k, 1] * -1;                                 }                             }                             else                             {                                 if (dp[i - 1, k, 0] + dp[i - 1, k, 1] > dp[i, j, 0])                                 {                                     dp[i, j, 0] = dp[i - 1, k, 0] + dp[i - 1, k, 1];                                     dp[i, j, 1] = dp[i - 1, k, 1];                                 }                                                              }                         }                     }             int positiveans = dp[s.Length - 1, n, 0];             for (int i = 1; i < s.Length; i++)                 for (int j = 0; j < n + 1; j++)                 {                     dp[i, j, 0] = 0;                     dp[i, j, 1] = 0;                 }             for (int i = 1; i < s.Length; i++)                 for (int j = 0; j <= n; j++)                     for (int k = 0; k <= j; k++)                     {                         if (s[i] == 'F')                         {                             if ((j - k) % 2 == 0)                             {                                 if (dp[i - 1, k, 0] + dp[i - 1, k, 1] < dp[i, j, 0])                                 {                                     dp[i, j, 0] = dp[i - 1, k, 0] + dp[i - 1, k, 1];                                     dp[i, j, 1] = dp[i - 1, k, 1];                                 }                             }                             else                             {                                 if (dp[i - 1, k, 0] < dp[i, j, 0])                                 {                                     dp[i, j, 0] = dp[i - 1, k, 0];                                     dp[i, j, 1] = dp[i - 1, k, 1] * -1;                                 }                             }                         }                         else                         {                             if ((j - k) % 2 == 0)                             {                                 if (dp[i - 1, k, 0] < dp[i, j, 0])                                 {                                     dp[i, j, 0] = dp[i - 1, k, 0];                                     dp[i, j, 1] = dp[i - 1, k, 1] * -1;                                 }                             }                             else                             {                                 if (dp[i - 1, k, 0] + dp[i - 1, k, 1] < dp[i, j, 0])                                 {                                     dp[i, j, 0] = dp[i - 1, k, 0] + dp[i - 1, k, 1];                                     dp[i, j, 1] = dp[i - 1, k, 1];                                 }                             }                         }                     }             int negativeans = dp[s.Length - 1, n, 0];             Console.WriteLine(Math.Max(positiveans,Math.Abs(negativeans)));             Console.ReadKey();                      }     } }
点赞 回复 分享
发布于 2019-09-21 05:19
我猜楼主也是没考虑到负距离所以第五题0.4了。。。
点赞 回复 分享
发布于 2019-09-21 05:22

相关推荐

10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
评论
点赞
9
分享
牛客网
牛客企业服务