zoukankan      html  css  js  c++  java
  • 一些铜牌题

    题目集1

    A

    https://vjudge.net/contest/412612#problem/A

    求有多少个S子串满足长度是M*L,子串划分为M节长度为L的小子串,M节小子串的每一位都不同

    解:哈希然后尺取

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e5 + 5;
    ll mod = 998244353;

    ull base[N], h[N];
    ull gethash(ll l, ll r) {
       return h[r] - h[l - 1] * base[r - l + 1];
    }
    int main() {
    #ifdef _DEBUG
       freopen("input.txt", "r", stdin);
       //freopen("output.txt", "w", stdout);
    #endif
       ios::sync_with_stdio(false);
       cin.tie(nullptr);
       ll n, m;
       ll seed = 31;
       base[0] = 1;
       for (int i = 1; i < N; i++) {
           base[i] = base[i - 1] * 31;
      }
       string s;
       while (cin >> n >> m >> s) {
           for (int i = 0; i < s.size(); i++) {
               h[i] = h[i - 1] * seed + s[i];
          }
           ll ans = 0;
           for (int i = 0; i<m && i+n*m < s.size(); i++) {
               map<ull,ll> mp;
               for (int j = i,k = 0; k < n; j += m,k++) {
                   mp[gethash(j, j + m - 1)]++;
              }
               if (mp.size() == n)
                   ans++;
               for (int j = 0; j < (s.size() - n * m - i)/m; j++) {
                   ll tmp = gethash(i + j * m, i + j * m + m - 1);
                   mp[tmp]--;
                   if (mp[tmp] == 0)
                       mp.erase(tmp);
                   mp[gethash(i + j * m + n * m, i + j * m + m - 1 + m * n)]++;
                   if (mp.size() == n)
                       ans++;
              }
          }
           cout << ans << endl;
      }

       return 0;
    }

    B

    https://vjudge.net/contest/412612#problem/B

    有n个试题,每个题目分值是ai,正确率为0.5,设得分为x,p为最终得分不超过x的概率,求得分ans,满足:P(X<=ans)=p。

    解:dp一哈,f_{ij}代表前i个题目得分j的概率

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e5 + 5;
    ll mod = 998244353;
    double eps = 1e-4;
    ll a[50];
    int main() {
    #ifdef _DEBUG
       freopen("input.txt", "r", stdin);
       //freopen("output.txt", "w", stdout);
    #endif
       ios::sync_with_stdio(false);
       cin.tie(nullptr);
       ll T;
       cin >> T;
       while (T--) {
           ll n;
           double p;
           ll sum = 0;
           cin >> n >> p;
           rep(i, 1, n) {
               cin >> a[i];
               sum += a[i];
          }
           vector<vector<double>>f(n+1,vector<double>(sum + 1));
           f[0][0] = 1;        
           rep(i, 1, n) {
               rep(j, 0, sum) {
                   f[i][j] += f[i - 1][j] * 0.5;
                   if(j>=a[i])
                       f[i][j] += f[i - 1][j - a[i]] * 0.5;
              }
          }
           double ans = 0;
           rep(i, 0, sum) {
               ans += f[n][i];
               if (ans >= p)
              {
                   cout << i << endl;
                   break;
              }
          }
      }

       return 0;
    }

    C

    https://vjudge.net/contest/412612#problem/C

    水题

    D

    https://vjudge.net/contest/412612#problem/D

    n个数字,求从k(1~n),n中选择k个数异或,然后把所有的情况加起来就是答案。

    解:拆位,组合数

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e5 + 5;
    ll mod = 1e6+3;
    ll c[1005][1005], a[1005];
    int main() {
    #ifdef _DEBUG
       freopen("input.txt", "r", stdin);
       //freopen("output.txt", "w", stdout);
    #endif
       ios::sync_with_stdio(false);
       cin.tie(nullptr);
       c[0][0] = 1;
       rep(i, 1, 1000) {
           c[i][0] = 1;
           rep(j, 1, i) {
               c[i][j] = (c[i - 1][j] + c[i-1][j - 1]) % mod;
          }
      }
       ll n;
       while (cin >> n) {
           rep(i, 1, n) {
               cin >> a[i];
          }
           vector<ll> cnt(35);
           rep(i, 0, 31) {
               rep(j, 1, n) {
                   cnt[i] += (a[j] >> i) & 1;
              }
          }
           rep(k, 1, n) {
               ll ans = 0;
               rep(i, 0, 31) {
                   for (int j = 1; j <= k; j += 2) {
                       ans = (ans + (c[cnt[i]][j] * c[n - cnt[i]][k - j]) % mod * (1 << i) % mod) % mod;
                  }
              }
               cout << ans;
               if(k!=n)
                   cout<<' ';
          }
           cout << endl;
      }

       return 0;
    }

    E

    https://vjudge.net/contest/412612#problem/E

    思维

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e5 + 5;

    int main() {
    #ifdef _DEBUG
       freopen("input.txt", "r", stdin);
       //freopen("output.txt", "w", stdout);
    #endif
       ios::sync_with_stdio(false);
       cin.tie(nullptr);
       ll r, y, b;
       while (cin >> r >> y >> b) {
           ll le = 0, ri = 0;
           ll res = 0;

           if (r > 0)
               le++, r--;
           if (y > 0)
               res += le, le++, y--;
           if (b > 0)
               res += le, le++, b--;

           if (r > 0)
               ri++, r--, res += le;
           if (y > 0)
               res += le + ri, ri++, y--;
           if (b > 0)
               res += le + ri, ri++, b--;

           res += (r + y + b) * (le + ri);
           cout << res << endl;
      }
       return 0;
    }

    F

    https://vjudge.net/contest/412612#problem/F

    模拟

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e5 + 5;

    ll a[50][50], b[50][50],h[50][50];
    ll n;

    void rotate() {
       rep(i, 1, n) {
           dec(j, n, 1) {
               h[n-j+1][i] = a[i][j];
          }
      }
       rep(i, 1, n) {
           rep(j, 1, n) {
               a[i][j] = h[i][j];
          }
      }
    }

    ll getDiff() {
       ll res = 0;
       rep(i, 1, n) {
           rep(j, 1, n) {
               if (a[i][j] == b[i][j])
                   res++;
          }
      }
       return res;
    }


    int main() {
    #ifdef _DEBUG
       freopen("input.txt", "r", stdin);
       //freopen("output.txt", "w", stdout);
    #endif
       ios::sync_with_stdio(false);
       cin.tie(nullptr);
       while (cin >> n,n) {
           rep(i, 1, n) {
               rep(j, 1, n) {
                   cin >> a[i][j];
              }
          }
           rep(i, 1, n) {
               rep(j, 1, n) {
                   cin >> b[i][j];
              }
          }
           ll ans = getDiff();
           rep(i, 1, 3) {
               rotate();
               ans = max(ans, getDiff());
          }
           cout << ans << endl;
      }
       return 0;
    }

    G

    https://vjudge.net/contest/412612#problem/G

    旅行商问题,bfs求距离后暴力

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e5 + 5;

    ll n, m;
    char g[105][105];
    ll dis[6][105][105];
    ll finalDis[10][10];
    map<pll, ll> mp;
    ll d[4][2] = { {-1,0},{0,-1},{1,0},{0,1} };
    void bfs(ll x, ll y, ll cur) {
       queue<pll> q;
       q.push({ x,y });
       dis[cur][x][y] = 0;
       vector<vector<bool>> vis(n + 1, vector<bool>(m + 1));
       vis[x][y] = 1;
       while (!q.empty()) {
           pll f = q.front();
           q.pop();
           rep(i, 0, 3) {
               ll dx = f.first + d[i][0], dy = f.second + d[i][1];
               if (dx <= n && dx >= 1 && dy <= m && dy >= 1 && !vis[dx][dy] && g[dx][dy] != '#') {
                   q.push({ dx,dy });
                   vis[dx][dy] = 1;
                   dis[cur][dx][dy] = dis[cur][f.first][f.second] + 1;
              }
          }
      }
       for (auto it : mp) {
           finalDis[cur][it.second] = dis[cur][it.first.first][it.first.second];
      }
    }

    int main() {
    #ifdef _DEBUG
       freopen("input.txt", "r", stdin);
       //freopen("output.txt", "w", stdout);
    #endif
       ios::sync_with_stdio(false);
       cin.tie(nullptr);
       while (cin >> n >> m, n, m) {
           ll sx, sy;
           rep(i, 1, n) {
               cin >> g[i] + 1;
               rep(j, 1, m) {
                   if (g[i][j] == '@')
                       sx = i, sy = j;
              }
          }
           mp.clear();
           mp[{sx, sy}] = 0;
           ll k;
           cin >> k;
           vector<ll> permutation;
           rep(i, 1, k) {
               ll x, y;
               cin >> x >> y;
               mp[{x, y}] = i;
               permutation.push_back(i);
          }
           rep(i, 0, k) {
               rep(j, 0, k) {
                   finalDis[i][j] = INF;
              }
          }
           rep(i, 0, k) {
               rep(j, 0, n) {
                   rep(p, 0, m) {
                       dis[i][j][p] = INF;
                  }
              }
          }
           for (auto x : mp) {
               bfs(x.first.first, x.first.second, x.second);
          }
           ll ans = INF;
           do {
               ll tot = finalDis[0][permutation[0]];
               rep(i, 0, k - 2) {
                   tot += finalDis[permutation[i]][permutation[i + 1]];
              }
               ans = min(ans, tot);
          } while (next_permutation(permutation.begin(), permutation.end()));
           if (ans == INF)
               cout << "-1" << endl;
           else
               cout << ans << endl;
      }
       return 0;
    }

    H

    https://vjudge.net/contest/412612#problem/H

    暴力,遍历到中间不合要求的得剪枝,否则过不了。。。

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e5 + 5;

    ll n, m;
    char g[205][205];
    pll mp[20];
    ll cnt;
    ll d[4][2] = { {-1,1},{1,1},{1,-1},{-1,-1} };
    bool check(ll x) {
       vector<ll> lights;
       rep(i, 0, cnt - 1) {
           if ((x>>i) & 1) {
               lights.push_back(i);
          }
      }
       rep(i,0,(ll)lights.size()-1) {
           rep(j, 0, 3) {
               set<pll> st;
               bool fg = 1;
               rep(k, 0, lights.size() - 1) {
                   ll x = mp[lights[k]].first, y = mp[lights[k]].second;
                   ll dx = x+d[0][0], dy = y+d[0][1];
                   if (k == i) {
                       dx = x+d[j][0], dy = y+d[j][1];
                  }
                   if (g[dx][y] != '#' && g[x][y] != '#' && g[x][dy] != '#') {
                       if (g[dx][y] == '.')
                           st.insert({ dx,y });
                       if (g[x][y] == '.')
                           st.insert({ x,y });
                       if(g[x][dy] == '.')
                           st.insert({ x,dy });
                  }
                   else {
                       fg = 0;
                       break;
                  }
              }
               if (st.size() == cnt && fg) {
                   return 1;
              }
          }
      }
       return 0;
    }
    ll getNum(ll x) {
       ll ans = 0;
       while (x) {
           if (x & 1)
               ans++;
           x >>= 1;
      }
       return ans;
    }
    int main() {
    #ifdef _DEBUG
       freopen("input.txt", "r", stdin);
       //freopen("output.txt", "w", stdout);
    #endif
       //ios::sync_with_stdio(false);
       //cin.tie(nullptr);
       while (cin >> n >> m, n, m) {
           cnt = 0;
           rep(i, 0, n + 1)
               rep(j, 0, m + 1)
                   g[i][j] = ' ';
           rep(i, 1, n) {
               scanf("%s",g[i] + 1);
               rep(j, 1, m) {
                   if (g[i][j] == '.') {
                       mp[cnt++] = { i,j };
                  }
              }
          }
           ll ans = INF;
           if (cnt == 0)
               ans = 0;
           rep(i, 0, (1<<cnt) - 1) {
               if (check(i)) {  
                   ans = min(ans, getNum(i));
              }
          }
           if (ans == INF)
               cout << -1 << ' ';
           else
               cout << ans << ' ';
      }
       return 0;
    }

    I

    https://vjudge.net/contest/412612#problem/I

    感觉这个思路比较重要,确定出一张图的上下限,就可以判断是否可以构造出来。如果要去通过构造来说明可以构造的话也太难了而且时间也不允许。

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e5 + 5;

    ll n, m;

    struct edge {
       ll u, v, w;
    };

    vector<edge> e;

    ll f[N];

    ll find(ll x) {
       return f[x] == x ? x : f[x] = find(f[x]);
    }

    void add(ll u, ll v) {
       ll fu = find(u),fv = find(v);
       if (fu != fv)
           f[fu] = fv;
    }

    ll getVal() {
       rep(i, 1, n) {
           f[i] = i;
      }
       ll ans = 0;
       rep(i, 1, m) {
           if (find(e[i].u) != find(e[i].v)) {
               add(e[i].u, e[i].v);
               ans += e[i].w;
          }
      }
       return ans;
    }

    bool check() {
       ll fa = find(1);
       rep(i, 2, n) {
           if (find(i) != fa)
               return 0;
      }
       return 1;
    }
    ll fib[50];

    int main() {
    #ifdef _DEBUG
       freopen("input.txt", "r", stdin);
       //freopen("output.txt", "w", stdout);
    #endif
       ios::sync_with_stdio(false);
       cin.tie(nullptr);
       fib[1] = 1, fib[2] = 1;
       rep(i, 3, 45) {
           fib[i] = fib[i - 1] + fib[i - 2];
      }
       ll T;
       cin >> T;
       rep(cas,1,T) {
           cin >> n >> m;
           e = vector<edge>(m + 1);
           rep(i, 1, n) {
               f[i] = i;
          }
           rep(i, 1, m) {
               cin >> e[i].u >> e[i].v >> e[i].w;  
               add(e[i].u, e[i].v);
          }
           cout << "Case #" << cas << ": ";
           if (check()) {
               sort(e.begin() + 1, e.end(), [](edge a, edge b) {return a.w < b.w; });
               ll down = getVal();
               sort(e.begin() + 1, e.end(), [](edge a, edge b) {return a.w > b.w; });
               ll up = getVal();
               bool fg = 0;
               rep(i, 1, 45) {
                   if (fib[i] <= up && fib[i] >= down)
                       fg = 1;
              }
               if (fg) {
                   cout << "Yes" << endl;
              }
               else {
                   cout << "No" << endl;
              }
          }
           else {
               cout << "No" << endl;
          }

      }
       return 0;
    }

     

    J

    https://vjudge.net/contest/412612#problem/J

    猜的结论,大边和大边组合,贪心

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e5 + 5;

    double a[20];

    int main() {
    #ifdef _DEBUG
    freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    #endif
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    ll n;
    while (cin >> n, n) {
    rep(i, 1, n) {
    cin >> a[i];
    }
    double ans = 0;
    sort(a + 1, a + n+1, [](double u, double v) {return u > v; });
    rep(i, 1, n - 2) {
    if (a[i] < a[i + 1] + a[i + 2]) {
    double p = (a[i] + a[i + 1] + a[i + 2]) / 2;
    ans += sqrt(p * (p - a[i]) * (p - a[i+1]) * (p - a[i+2]));
    i += 2;
    }
    }
    cout << fixed << setprecision(2) << ans << endl;
    }
    return 0;
    }

    K

    https://vjudge.net/contest/412612#problem/K

    最短路

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e5 + 5;

    ll n, m;
    struct node {
    ll id, w;
    friend bool operator < (node a,node b) {
    return a.w > b.w;
    }
    };

    vector<vector<node>> g;

    ll dijkstra(ll x) {
    priority_queue<node> q;
    vector<ll> dis(n + 1,INF);
    dis[1] = 0;
    vector<bool> vis(n + 1);
    q.push({ 1,0 });
    while (!q.empty()) {
    node f = q.top();
    q.pop();
    vis[f.id] = 1;
    for (auto nxt : g[f.id]) {
    if (nxt.id != x && nxt.w+dis[f.id]<dis[nxt.id]) {
    dis[nxt.id] = nxt.w + dis[f.id];
    if(!vis[nxt.id])
    q.push(nxt);
    }
    }
    }
    return dis[n];
    }

    int main() {
    #ifdef _DEBUG
    freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    #endif
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    while (cin >> n >> m,n,m) {
    ll cnt = 0;
    g = vector<vector<node>>(n + 1);
    rep(i, 1, m) {
    ll u, v, w;
    cin >> u >> v >> w;
    g[u].push_back({ v,w });
    g[v].push_back({ u,w });
    }
    ll ans = 0;
    rep(i, 2, n - 1) {
    ans = max(ans, dijkstra(i));
    }
    if (ans == INF)
    cout << "Inf" << endl;
    else
    cout << ans << endl;

    }
    return 0;
    }

    L

    https://vjudge.net/contest/412612#problem/L

    区间[1,R-L+1]与区间[L,R]的长度一样,所以如果输出YES,那么区间[L,R]中的数字就是1到R-L+1数字的全排列形式。那么就判断这个满足下面两点就行

    1、区间和等于(R-L+2)*(R-L+1)/2;

    2.该段区间内没有重复数字。

    坑:ll把我T飞了

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e6 + 5;

    ll n, m;

    int tr[N << 2], a[N], b[N], sum[N], pos[N];
    ll ls(ll x) { return x << 1; }
    ll rs(ll x) { return x << 1 | 1; }
    void pushup(ll x) {
    tr[x] = max(tr[ls(x)] , tr[rs(x)]);
    }
    void build(ll p,ll l,ll r) {
    if (l == r){
    tr[p] = b[l];
    return;
    }
    ll mid = (l + r) >> 1;
    build(ls(p), l, mid);
    build(rs(p), mid + 1, r);
    pushup(p);
    }
    ll query(ll ql, ll qr, ll l, ll r, ll p) {
    if (r < ql || qr < l)
    return 0;
    if (ql <= l && r <= qr)
    return tr[p];
    ll mid = (l + r) >> 1;
    return max(query(ql, qr, l, mid, ls(p)), query(ql, qr, mid + 1, r, rs(p)));
    }
    int main() {
    #ifdef _DEBUG
    freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    #endif
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    while (cin >> n >> m) {
    rep(i, 1, n)
    pos[i] = 0;
    rep(i, 1, n) {
    cin >> a[i];
    b[i] = pos[a[i]];
    pos[a[i]] = i;
    sum[i] = sum[i - 1] + a[i];
    }
    build(1, 1, n);
    while (m--) {
    ll ql, qr;
    cin >> ql >> qr;
    ll tmp = qr - ql + 1;
    if (query(ql, qr, 1, n, 1) < ql && (1 + tmp) * tmp / 2 == sum[qr] - sum[ql-1])
    cout<<"YES ";
    else
    cout<<"NO ";
    }
    }
    return 0;
    }

    M

    https://vjudge.net/contest/412612#problem/M

    暴力

    #include <bits/stdc++.h>
    #define ll long long
    #define ull unsigned long long
    #define rep(i,a,b) for(ll i=(a);i<=(b);i++)
    #define dec(i,a,b) for(ll i=(a);i>=(b);i--)
    #define pll pair<ll,ll>
    using namespace std;
    ll INF = 0x7f7f7f7f7f7f7f7f;
    const int N = 1e6 + 5;

    ll n;

    bool mp[220][220];
    struct point {
    ll x, y;
    friend bool operator < (point a, point b) {
    if (a.x == b.x)
    return a.y < b.y;
    return a.x < b.x;
    }
    }p[40];

    struct rectangle {
    point p1, p2;
    ll area;
    rectangle(point tp1, point tp2) {
    p1 = tp1;
    p2 = tp2;
    area = (p2.x - p1.x) * (p2.y - p1.y);
    }
    rectangle() {};
    }r[2000];

    ll check(ll i, ll j) {
    if (r[i].p2.x < r[j].p1.x ||
    r[i].p2.y < r[j].p1.y ||
    r[i].p1.x > r[j].p2.x ||
    r[i].p1.y > r[j].p2.y) {
    return 1;
    }
    if (r[i].p1.x < r[j].p1.x &&
    r[i].p1.y < r[j].p1.y &&
    r[j].p2.x < r[i].p2.x &&
    r[j].p2.y < r[i].p2.y) {
    return 2;
    }
    return 0;
    }
    int main() {
    #ifdef _DEBUG
    freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    #endif
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    while (cin >> n,n) {
    memset(mp, 0, sizeof mp);
    rep(i, 1, n) {
    cin >> p[i].x >> p[i].y;
    mp[p[i].x][p[i].y] = 1;
    }
    sort(p + 1, p + n + 1);
    ll cnt = 0;
    rep(i, 1, n) {
    rep(j, i + 1, n) {
    if (mp[p[i].x][p[j].y] && mp[p[j].x][p[i].y] &&
    p[j].x > p[i].x && p[j].y>p[i].y) {
    //r[++cnt].p1 = p[i],r[cnt].p2 = p[j],r[cnt].area = (p[j].y-p[i].y)*(p[j].x - p[i].x);
    r[++cnt] = rectangle(p[i], p[j]);
    }
    }
    }
    ll ans = -1;
    rep(i, 1, cnt) {
    rep(j, 1, cnt) {
    if(check(i, j)==1) {
    ans = max(ans, r[i].area + r[j].area);
    }
    else if (check(i, j) == 2) {
    ans = max(ans, r[i].area);
    }
    }
    }
    if (ans == -1)
    cout << "imp" << endl;
    else
    cout << ans << endl;
    }
    return 0;
    }
  • 相关阅读:
    网格走法数目
    字典序(数据字典)
    异或(数据字典)
    头条校招
    Python中的zip()
    什么是“背书”
    求十进制整数的任意进制转换
    安装并使用pyecharts库(0.5.10)
    pycharm使用Ctrl+滚轮调整字体大小
    Anaconda中安装pyecharts
  • 原文地址:https://www.cnblogs.com/dealer/p/15478467.html
Copyright © 2011-2022 走看看