本来以为会巨难无比又有别的比赛可以打于是赛后补题,结果发现似乎略水,反正是找到了四个水题先贴下来

 

ZOJ-4099    J

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int t;
ll x, y, n;

int main()
{
    cin >> t;
    while (t--) {
        scanf("%lld",&n);
        x = n * 8;
        y = n * 9;
        printf("%lld %lld\n",x,y);
    }
    return 0;
}
ZOJ-4099

  找相差给出数的两个合数。所以找两个最小的相差为一的合数就好了。

 

ZOJ-4090    A

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
pair<int, int>g[100005], b[100005];
int n, m, t;

int main()
{
    cin >> t;
    while (t--) {
        scanf("%d%d",&n,&m);
        int b0 = 0, g0 = 0;
        for (int i = 0; i < n; i++)scanf("%d", &b[i].second);
        for (int i = 0; i < m; i++)scanf("%d", &g[i].second);
        for (int i = 0; i < n; i++) {
            scanf("%d", &b[i].first);
            if (!b[i].first)b0++;
        }
        for (int i = 0; i < m; i++) {
            scanf("%d", &g[i].first);
            if (!g[i].first)g0++;
        }
        sort(b, b + n);
        sort(g, g + m);
        int ans = 0;
        int now = g0;
        for (int i = 0; i < b0&&now<m; i++) 
            if (b[i].second > g[now].second) {ans++; now++;}
        now = b0;
        for(int i=0;i<g0&&now<n;i++)
            if (b[now].second < g[i].second) {ans++;now++;}
        cout << ans << endl;
    }
    return 0;
}
ZOJ-4090

  匹配高矮舞伴。按身高排序,给不同需求排一遍,完了。

 

ZOJ-4094    E

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n, t;
int a[105], b[105];

int main()
{
    cin >> t;
    while (t--) {
        scanf("%d", &n);
        for (int i = n - 1; i >= 0; i--)scanf("%d", &a[i]);
        for (int i = n - 1; i >= 0; i--)scanf("%d", &b[i]);
        long long tp = 0;
        bool falg = 1;
        for (int i = 0; i < n; i++) {
            if (b[i] + tp < a[i]) { falg = 0; break; }
            tp += b[i] - a[i];
        }
        if (!falg)cout << "No" << endl;
        else cout << "Yes" << endl;
    }
    return 0;
}
ZOJ-4094

  异常水,异常wa了很多次,变量名用重复了orz

 

ZOJ-4096    G

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n, t,k;
int a[100005],b[100005];

int main()
{
    cin >> t;
    while (t--) {
        scanf("%d%d", &n,&k);
        int ma = -1;
        int l = 0, r = 0,tp;
        for (int i = 0; i < n; i++) {
            scanf("%d", &tp);
            if (tp < 0)b[l++] = -tp;
            else a[r++] = tp;
            ma = max(ma, abs(tp));
        }
        sort(a, a + r);
        sort(b, b + l);
        long long ans = 0;
        for (int i = r - 1; i >= 0; i -= k)ans += a[i] * 2;
        for (int i = l - 1; i >= 0; i -= k)ans += b[i] * 2;
        ans -= ma;
        cout << ans << endl;
        
    }
    return 0;
}
ZOJ-4096

  有一点需要思考了呢。

  首先送信回来取信路程是乘2的,但是终结工作可以在送信地点,那么最远的地方就最后一次送。

  其次,近的地方可以去远的地方的时候顺路去,不然就要重复走好几次。

  最后,因为是往轴的两边送信,要分两边算。

  所以,跳k个加个双倍,最后把最大值减掉一个就完成了。(๑•̀ㅂ•́)و✧

 

那就先这样吧。

 posted on 2019-05-14 17:28  Nonad  阅读(101)  评论(0编辑  收藏  举报