A签到
用map标记输出过的数组达到去重的目的
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
map<int, bool> mp;
vector<int> a(n);
for(int i = 0; i < n; i++) {
cin >> a[i];
}
for(int i = 0; i < n; i++) {
if(!mp[a[i]]) {
cout << a[i] << ' ';
mp[a[i]] = 1;
}
}
return 0;
}
B百分之x的信心
变成百分数形式乘100.0即可
#include<bits/stdc++.h>
using namespace std;
int main() {
double x;
cin >> x;
cout << x * 100.0 << "%" << endl;
return 0;
}
C幻方
emm,这题打表找下规律,中间数很好找就是n方加1除2或直接除2向上取整,幻和打表发现和1-n方和有关,等差数列求和然后除n即可
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
int n;
cin >> n;
ll hh = (ll)(1 + n * n) * (n * n) / (2 * n);
ll zj = (ll)ceil((double)n * n / 2);
cout << hh << ' ' << zj;
return 0;
}
D不是幻方
题目很长题很简单,只看图也能看出来是排序每一列即可
#include<bits/stdc++.h>
using namespace std;
int a[505][505];
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
vector<int> b;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
b.push_back(a[j][i]);
}
sort(b.begin(), b.end());
int k = 1;
for(auto x : b) {
a[k++][i] = x;
}
b.clear();
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
cout << a[i][j] << ' ';
}
cout << endl;
}
return 0;
}
E要长脑子辣!!!
暴力求上下式子即可,最后用gcd来化简式子,记得分母开long long
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ll long long
ll gcd(ll a, ll b) {
return b ? gcd(b, a % b) : a;
}
void solve() {
int n, x, y;
cin >> n >> x >> y;
int sa = 0, sb = 0;
vector<int> a(n), b(n);
for(int i = 0; i < n; i++) {
cin >> a[i];
sa += a[i];
}
for(int i = 0; i < n; i++) {
cin >> b[i];
sb += b[i];
}
if(n == 0) {
cout << "0" << endl;
return;
}
int s = 0;
for(int i = 0; i < n; i++) {
s += (a[i] * b[i]);
}
ll A = s, B = pow(sa, x) + pow(sb, y);
int gd = gcd(A, B);
A /= gd, B /= gd;
if(B == 1) {
cout << A << endl;
} else cout << A << "/" << B;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
// cin >> t;
t = 1;
while(t--) {
solve();
}
return 0;
}
FHuadeyyds
用substr求串中几个Huade,如果一个都没有,输出0返回,如果有那么定义str来放入Huade前面的字符串,然后插入Huadeyyds,i要跳过Huade即i+=4
#include<bits/stdc++.h>
using namespace std;
void solve() {
string s;
cin >> s;
int ans = 0;
for (int i = 0; i < s.size() - 4; i++) {
if(s.substr(i, 5) == "Huade") {
ans++;
}
}
if(!ans) {
cout << "0" << endl;
return;
}
cout << ans << endl;
string str;
for(int i = 0; i < s.size(); i++) {
if(s.substr(i, 5) == "Huade") {
str += s.substr(i, 5);
str += "yyds";
i += 4;
} else {
str += s[i];
}
}
cout << str;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
// cin >> t;
t = 1;
while(t--) {
solve();
}
return 0;
}
H神奇"?"
以i为左端点(因为后面要遍历完st的长度,所以i只遍历到s的长度减去st的长度),用flag来标记是否有s和st不相等并且s中还不是?,如果有那么flag标记错误break(有一个不一样就不是,i就可以往下一个端点去了),当然如果满足除了?外都相等那么答案就++(?可以变任何小写字母相当于和st对应位置的字母相等)
#include<bits/stdc++.h>
using namespace std;
int f(string s, string st) {
int ans = 0;
int n = s.length();
int m = st.length();
for(int i = 0; i <= n - m; i++) {
bool flag = true;
for(int j = 0; j < m; j++) {
if(s[i + j] != st[j] && s[i + j] != '?') {
flag = false;
break;
}
}
if(flag) {
ans++;
}
}
return ans;
}
int main() {
string s;
cin >> s;
string st;
cin >> st;
cout << f(s, st);
return 0;
}
ICrazy小飞象!
算是bfs的模板吧,不过移动的距离要改一下,毕竟象是飞田的hhh
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
typedef pair<int, int> PII;
queue<PII> q;
int dx[4] = {-2, -2, 2, 2}, dy[4] = {-2, 2, 2, -2};
int d[405][405];
int n, m , x, y;
void bfs(int x, int y) {
d[x][y] = 0;
q.push({x, y});
while(!q.empty()) {
auto f = q.front();
q.pop();
for(int i = 0; i < 4; i++) {
int x = f.fi + dx[i];
int y = f.se + dy[i];
if(x >= 1 && x <= n && y >= 1 && y <= m && d[x][y] == -1) {
d[x][y] = d[f.fi][f.se] + 1;
q.push({x, y});
}
}
}
}
int main() {
cin >> n >> m >> x >> y;
memset(d, -1, sizeof d);
bfs(x, y);
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
cout << d[i][j] << ' ';
}
cout << endl;
}
return 0;
}
J幸存者
每经历过一个人就过了一个回合,每过k个回合到当前枪手的位置枪手会向下一个人开枪,下一个人就会挂掉(用map标记false即挂掉hhh)因为是向下一个人开枪所以我cnt初值赋的-1这样cnt回合++到k回合时其实就是当前枪手挂掉
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
map<int, bool> mp;
vector<int> a(n + 1);
for(int i = 1; i <= n; i++) {
cin >> a[i];
mp[a[i]] = false;
}
int cnt = -1;
int count = 0;
for(int i = 1; i <= n; i++) {
if(cnt == k && !mp[a[i]]) {
mp[a[i]] = true;
cnt = 0;
cout << a[i] << ' ';
count++;
}
if(!mp[a[i]] && cnt != k) {
cnt++;
}
if(i == n) i = 0;
if(count == n - 1) break;
}
return 0;
}
K喝"水"题
高中知识直接半球体积加大圆锥减小圆锥即可(直接求圆台体积也行)
#include<bits/stdc++.h>
using namespace std;
int main() {
int R, r, H, h;
cin >> R >> r >> H >> h;
double qiu, pi = 3.14;
qiu = (2.0 * pi * pow(R, 3)) / 3.0;
double y1, y2, yt;
int h2 = H - h;
double s1 = pi * pow(r, 2);
double s2 = pi * pow(R, 2);
y1 = (1.0 * s1 * h) / 3.0;
y2 = (1.0 * s2 * H) / 3.0;
yt = y2 - y1;
printf("%.2lf", (yt + qiu));
return 0;
}
L是不涉及懒标记的线段树,本人也是懒得一批一直觉得线段树很难没有去学qwq