第二次比赛出题题解
第二次比赛题解
P1138 第 k 小整数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
主要了解set的用法,set会自动去重和排序
#include <bits/stdc++.h>
using namespace std;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,k;
cin >> n >> k;
set<int> s;
for(int i = 0, x ;i < n;i ++){
cin >> x;
s.insert(x);
}
if(k > s.size())
cout << "NO RESULT" << endl;
else{
for(auto i : s){
k--;
if(k == 0){
cout << i << endl;
break;
}
}
}
return 0;
}
P9044 Koszulki - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
其实就是从大到小排个序之后看第k个人和后面是不是一样的,我这里从小到大排序,从后遍历也是一样的
#include <bits/stdc++.h>
using namespace std;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,k;
cin >> n >> k ;
vector<int> a(n);
for(auto &i : a) cin >> i;
sort(a.begin(),a.end());
int ans = 0;
for(int i = n - k - 1;i >= 0;i --){
if(a[i] == a[i + 1])
ans ++;
else
break;
}
cout << ans + k << endl;
return 0;
}
P2788 数学1(math1)- 加减算式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
每一项都保证是非负数,就不用考虑第一个数的正负性,其余跟着模拟就行
#include <bits/stdc++.h>
using namespace std;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s;
cin >> s;
int ans = 0;
char op = '?';
for(int i = 0;i < s.size();i ++){
int num = 0;
while(s[i] >= '0' && s[i] <= '9'){
num = num * 10 + s[i] - '0';
i++;
}
if(op == '-')
ans -= num;
else
ans += num;
op = s[i];
}
cout << ans << endl;
return 0;
}
P2084 进制转换 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
注意+号的判断
#include <bits/stdc++.h>
using namespace std;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
string s;
cin >> n >> s;
int one = 0;
for(int i = 0;i < s.size();i ++)
if(s[i] != '0')
one ++;
for(int i = 0;i < s.size();i ++){
if(s[i] != '0'){
cout << s[i] << '*' << n << '^' << s.size() - i - 1;
one--;
if(one > 0)
cout << '+';
}
}
return 0;
}
B3642 二叉树的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
作业题的一个变型题,也怪我,当时鼠标没电了,只是用白板来展示这个遍历不好理解
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
struct Node{
int root;
int left,right;
};
vector<Node> tree(N);
void traversal1(int x){
if(x == 0 ) return;
cout << x << ' ';
traversal1(tree[x].left);
traversal1(tree[x].right);
};
void traversal2(int x){
if(x == 0) return;
traversal2(tree[x].left);
cout << x << ' ';
traversal2(tree[x].right);
};
void traversal3(int x){
if(x == 0) return;
traversal3(tree[x].left);
traversal3(tree[x].right);
cout << x << ' ';
};
int main() {
int n;
cin >> n;
for(int i = 1;i <= n;i ++){
int x,y;
cin >> x >> y ;
tree[i].left = x;
tree[i].right = y;
tree[x].root = tree[y].root = i;
}
traversal1(1);
cout << endl;
traversal2(1);
cout << endl;
traversal3(1);
return 0;
}
B2001 入门测试题目 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
签到题,注意开long long
#include <bits/stdc++.h>
using namespace std;
int main() {
long long a,b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}