江苏电信代码题题解
1、简单做的是节日礼物
简单模拟即可,代码如下 100%
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
vector<int> v;
while(cin >> s){
auto n = stoi(s);
v.push_back(n);
char c = cin.get();
if (c == '\n') {
break;
}
}
int mn = 1e9;
for(int i = 0;i < v.size(); i++){
int sum = 0;
for(int j = 0;j < v.size(); j++){
if(v[j] >= v[i]) sum += v[j] - v[i];
else sum += v[j];
}
mn = min(mn,sum);
}
cout << mn << endl;
return 0;
}
2、中等做的是bug题 100%
dfs即可
代码如下:
#include <iostream>
using namespace std;
void dfs(int n,int t,int &mn){
if(t > mn) return;
if(n == 1){
mn = min(mn,t + 1);
return;
}
if(n) dfs(n - 1,t + 1,mn);
if(n%2 == 0) dfs(n/2,t + 1,mn);
if(n%3 == 0) dfs(n/3,t + 1,mn);
}
int main() {
int n;
cin >> n;
int mn = 1e9;
dfs(n,0,mn);
cout << mn << endl;
return 0;
}
3、难题做的是求方案数量 全部通过得分0%
使用了位运算:
感觉这题提交有bug,不管提交什么都是用例通过,得分0%,按理说复杂度有点高也只是超时。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n,m,l;
cin >> n >> m >> l;
vector<int> g(l),p(l);
for(int i = 0;i < l; i++) scanf("%d",&g[i]);
for(int i = 0;i < l; i++) scanf("%d",&p[i]);
int a = pow(2,l),res = 0;
for(int i = 1; i < a; i++) {
int now = 0,x = 0;
for(int j = 0;j < l; j++) if(i >> j & 1) x += g[j],now += p[j];
if(x <= n && now >= m) {
res++;
}
}
cout << res << endl;
return 0;
}
查看19道真题和解析