美团点评2020校招系统开发方向笔试题
发布日期:2021-05-20 04:56:40 浏览次数:22 分类:精选文章

本文共 2515 字,大约阅读时间需要 8 分钟。

第七题

代码
#include 
#include
#include
using namespace std;
int a, b;
char c;
int main(){
scanf("%c%d%c", &c, &a, &c);
getchar();
scanf("%c%d%c", &c, &b, &c);
printf("%c%d%c", c, a + b, c);
return 0;
}

第八题

思路
枚举所有的情况,如果当前这个序列是回文,就ans++ 最后输出ans

代码

#include 
#include
#include
using namespace std;
string x, s;
int main(){
int ans = 0;
cin >> s;
for(int i = 0; i < s.size(); i++){
x = "";
for(int j = 0; j <= i; j++){
x += s[i - j];
string t = x;
reverse(t.begin(), t.end());
if(t == x){
//ans++;
}
}
}
cout << ans << endl;
return 0;
}

第九题

思路
区间DP石子合并经典问题, 见蓝皮书284页

代码

#include 
#include
#include
#include
using namespace std;
int n;
int a[110], sum[110];
int f[110][110];
int main(){
cin >> n;
memset(f, 0x3f, sizeof f);
for(int i = 1; i <= n; i++){
cin >> a[i];
sum[i] = sum[i - 1] + a[i];
f[i][i] = 0;
}
for(int len = 2; len <= n; len++){
for(int l = 1; l <= n - len + 1; l++){
int r = l + len - 1;
int s = sum[r] - sum[l - 1];
for(int k = l; k < r; k++){
f[l][r] = min(f[l][r], f[l][k] + f[k + 1][r] + s);
}
}
}
cout << f[1][n] << endl;
return 0;
}

第十题

暴力枚举

代码

#include 
#include
#include
#include
using namespace std;
string s[110];
int n;
string get_ans(string t, int k){
string ans = t.substr(0, 1);
for(int i = 0; i < n; i++){
if(i == k) continue;
int j = 0;
while(s[i][j] == t[j]){
j++;
if(j >= ans.size()){
ans = t.substr(0, j + 1);
}
}
}
return ans;
}
int main(){
cin >> n;
for(int i = 0; i < n; i++){
cin >> s[i];
}
for(int i = 0; i < n; i++){
string ans = get_ans(s[i], i);
cout << ans << endl;
}
return 0;
}

字符串HASH代码 不能全过

代码

#include 
#include
#include
#include
using namespace std;
typedef unsigned long long ULL;
const int N = 110, P = 13331;
ULL p[N][N], h[N][N];
int n, m;
char s[N][N];
ULL query(int l, int r, int i){
return h[i][r] - h[i][l - 1] * p[i][r - l + 1];
}
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%s", s[i] + 1);
}
for(int k = 1; k <= n; k++){
p[k][0] = 1;
int Size = strlen(s[k] + 1);
for(int i = 1; i <= Size; i++){
p[k][i] = p[k][i - 1] * P;
h[k][i] = h[k][i - 1] * P + s[k][i] - 'a' + 1;
}
}
for(int i = 1; i <= n; i++){
int len = 1;
for(int j = 1; j <= n; j++){
if(i == j) continue;
int Size = strlen(s[j] + 1);
for(int k = 1; k <= Size; k++){
if(query(1, k, i) == query(1, k, j)){
if(k >= len)
len++;
} else break;
}
}
for(int k = 1; k <= len; k++)
printf("%c", s[i][k]);
cout << endl;
}
}
上一篇:SUSE第四次课后作业
下一篇:SUSE暑假集训第三次作业

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月17日 22时01分27秒