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  阅读(113)  评论(0编辑  收藏  举报