华为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; }
点赞 25

相关推荐

小浪_Coding:个人技能一条测试没有
点赞 评论 收藏
分享
牛客网
牛客企业服务