华为ak
A.cpp
#include <bits/stdc++.h>
using namespace std;
int n;
typedef long long ll;
inline bool ok(ll i, ll j, ll k) {
ll a = i*i+j*j;
ll b = k*k;
return a == b;
}
int main() {
while (cin >> n) {
// cout << ok(20, 48, 52) <<endl;
int cnt = 0;
for(int i=1; i<=n/3; i++) {
for(int j=i; i+j+j<=n; j++) {
int k = n-i-j;
if(i+j > k && ok(i,j,k)) {
cnt++;
//cout << i <<" " << j <<" " << k<<endl;
}
}
}
printf("%d\n", cnt);
}
return 0;
}
B.cpp
#include <bits/stdc++.h>
using namespace std;
int mp[10][10];
int s[10];
int fa[100];
void init() {
for(int i=0; i<60; i++)
fa[i] = i;
}
int _fi(int x) {
return fa[x] == x ? x : fa[x] = _fi(fa[x]);
}
void _merge(int u, int v) {
int fu = _fi(u);
int fv = _fi(v);
fa[fu] = fv;
return ;
}
bool ok(int u, int v) {
if(u -1 == v || u + 1 == v || u-10 == v || u+10 == v)
return true;
return false;
}
int main() {
while(~scanf("%d %d %d %d %d %d", &s[1], &s[2], &s[3], &s[4], &s[5], &s[6])) {
init();
for(int i=1; i<=6; i++) {
for(int j=i+1; j<=6; j++) {
int u = s[i], v = s[j];
if(ok(u,v)) {
// cout << u <<" " << v <<endl;
_merge(i, j);
}
}
}
bool f = true;
for(int i=2; i<=6; i++) {
if(_fi(i) != _fi(i-1)) {
f = false;
break;
}
}
if(f) puts("1");
else puts("0");
}
return 0;
}
C.cpp 就是个LIS变形把
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
const int INF = 0x3f3f3f3f;
int n;
int s1[N], s2[N];
int pos[N];
unordered_map<int, int> mp1, mp2;
int dp[N];
int main() {
while(~scanf("%d", &n)) {
mp1.clear();
mp2.clear();
memset(pos, 0, sizeof(pos));
for(int i=1; i<=n; i++) {
scanf("%d", &s1[i]);
mp1[s1[i]] = i;
}
for(int i=1; i<=n; i++) {
scanf("%d", &s2[i]);
mp2[s2[i]] = i;
}
for(int i=1; i<=n; i++) {
pos[i] = mp2[s1[i]];
}
fill(dp, dp+n, INF);
// pos[i] lis
for(int i=1; i<=n; i++) {
*lower_bound(dp, dp+n, pos[i]) = pos[i];
}
printf("%d\n", n - (lower_bound(dp, dp+n, INF) - dp));
}
return 0;
}