网易笔试8.8 C++后端
第一题 忘记怎么在最前面插入了...所以就直接reverse了(反正不会TLE 100%
#include<bits/stdc++.h>
using namespace std;
int n,m,k,ans = -1;
string s,ss = "";
bool f(string s)
{
int l = 0, r = s.size()-1;
while (l <= r) {
if (s[l] != s[r]) return false;
l ++, r --;
}
return true;
}
int main()
{
cin >> s;
n = s.size();
while (f(s+ss) == false) {
reverse(ss.begin(), ss.end());
ss.push_back(s[m]);
reverse(ss.begin(), ss.end());
m ++;
if (m >= n) break;
}
cout << s+ss;
}
#include<bits/stdc++.h>
using namespace std;
int T,N,DROP;
int a[16];
void dfs(int mul, int index, int drop) // mul = VALUEA - VALUEB
{
if (mul == 0 && index == N+1) DROP = min(DROP, drop);
if (index > N) return;
// cout << mul << " " << index << " " << drop << "\n";
dfs(mul+a[index], index+1, drop);
dfs(mul-a[index], index+1, drop);
dfs(mul, index+1, drop+a[index]);
}
int main()
{
cin >> T;
while (T --) {
cin >> N;
DROP = 0;
for (int i = 1 ; i <= N ; i ++) {
cin >> a[i];
DROP += a[i];
};
dfs(0, 1, 0);
cout << DROP << "\n";
}
}
第三题 DP 100%
#include<bits/stdc++.h>
using namespace std;
int T,N,M;
int a[2005], b[2005];
int dp[2005];
void print(int k)
{
k %= (60*60*24);
int h = 8+k/3600;
int m = (k/60)%60;
int s = k%60;
int am = 0;
if (h>=24) am = 1;
else if (h > 12) am = 0;
else am = 1;
if (h<10) printf("0%d:",h);
else printf("%d:",h);
if (m<10) printf("0%d:",m);
else printf("%d:",m);
if (s<10) printf("0%d ",s);
else printf("%d ",s);
if (am) printf("am\n");
else printf("pm\n");
}
int main()
{
scanf("%d",&T);
while (T --) {
scanf("%d",&N);
dp[0] = INT_MAX;
for (int i = 1 ; i <= N ; i ++) {
scanf("%d",&a[i]);
dp[i] = INT_MAX;
}
for (int i = 2 ; i <= N ; i ++) scanf("%d",&b[i]);
dp[N] = 0;
for (int i = N ; i > 0 ; i --) {
if (i == 1) dp[i-1] = min(dp[i-1], dp[i]+a[i]);
else {
dp[i-1] = min(dp[i-1], dp[i]+a[i]);
dp[i-2] = min(dp[i-2], dp[i]+b[i]);
}
}
// printf("%d\n",dp[0]);
print(dp[0]);
}
}
第四题 强连通分量 10%
Tarjin模板提
可惜笔试不能看板子,手撸不会...
暴力应该能骗点分
#笔试题目##网易#