A. Anti-knapsack
有n个数字,删掉几个数,保证从剩下的数中选出任意几个数,他们相加都不为k。用一个vis[]来存数是否被删除,用cnt表示数的个数。
我们发现k本身要被删除外,比k小的数如k = 5时1,2,3,4中要删除1, 2两个数(保证剩下的数是最大的)。
#include <bits/stdc++.h>
using namespace std;
int t, n, k;
const int N = 1010;
int main()
{
scanf("%d", &t);
while (t -- )
{
scanf("%d%d", &n, &k);
vector<int> vis(n + 1, 1);
if (k == 1 || k == 2) vis[k] = 0;
else
{
vs[k] = 0;
int k1 = (k + 1) / 2 - 1;
for (int i = 1; i <= k1; i ++ ) vis[i] = 0;
}
int cnt = 0;
for (int i = 1; i <= n; i ++ )
if(vis[i] == 1) cnt ++;
printf("%d\n", cnt);
for (int i = n; i >= 1; i -- )
{
if (vis[i] == 1) printf("%d ", i);
}
printf("\n");
}
return 0;
}
B. Planet Lapituletti
就是给你一个时间,判断它的镜面反射是否合法,如果不合法,就输出离他最近的未来的时间。
模拟题,我手写了一个镜面翻转。计算未来的时间就不断地加就行了。
#include <bits/stdc++.h>
using namespace std;
int t, h, m;
char a[5];
int hh[2], mm[2];
// 数字转换
int tran(int x)
{
if (x == 0 || x == 1) return x;
if (x == 8) return x;
if (x == 2) return 5;
if (x == 5) return 2;
}
// 判断是否合法
int Check(int *hh1, int *mm1)
{
int f = 0;
int hh[2], mm[2];
for (int i = 0; i <= 1; i ++ )
{
hh[i] = hh1[i];
mm[i] = mm1[i];
}
for (int i = 0; i <= 1; i ++ )
{
if (hh[i] == 0 || hh[i] == 1 || hh[i] == 2 || hh[i] == 5 || hh[i] == 8) f = 1;
else return 0;
if (mm[i] == 0 || mm[i] == 1 || mm[i] == 2 || mm[i] == 5 || mm[i] == 8) f = 1;
else return 0;
}
int H1 = 0, M1 = 0;
// 镜面翻转
int h0 = hh[0], h1 = hh[1], m0 = mm[0], m1 = mm[1];
hh[0] = tran(m1);
hh[1] = tran(m0);
mm[0] = tran(h1);
mm[1] = tran(h0);
for (int i = 0; i <= 1; i ++ )
{
H1 = H1 * 10 + hh[i];
M1 = M1 * 10 + mm[i];
}
if (H1 >= h || M1 >= m) f = 0;
return f;
}
int main()
{
scanf("%d", &t);
while (t -- )
{
scanf("%d%d", &h, &m);
scanf("%s", a);
hh[0] = a[0] - '0';
hh[1] = a[1] - '0';
mm[0] = a[3] - '0';
mm[1] = a[4] - '0';
if (Check(hh, mm)) printf("%s\n", a);
else
{
int H = 0, M = 0;
for (int i = 0; i <= 1; i ++ )
{
H = H * 10 + hh[i];
M = M * 10 + mm[i];
}
while (!Check(hh, mm))
{
M ++;
if (M == m)
{
M = 0;
H ++;
}
if (H == h) H = 0;
// 数回数组
hh[0] = H / 10, hh[1] = H % 10;
mm[0] = M / 10, mm[1] = M % 10;
//cout <<'!' << hh[0] << hh[1] << ":" << mm[0] << mm[1] << endl;
}
cout << hh[0] << hh[1] << ":" << mm[0] << mm[1] << endl;
}
}
return 0;
}
C.K-beautiful Strings
雾,弱弱弱
晚上的cf比赛好运加满!