A. Div. 7
题意:
一个整数n.您必须更改其中的最小位数,使其能被
7
7
7整除。
思路:改变最后一位,把最后一位枚举一遍。
inline void solve()
{
int n;
cin >> n;
if (n % 7 == 0)
{
cout << n << endl;
}
else
{
int temp = n % 10;
for (int i = 0; i <= 9; i++)
{
int tt = n;
tt = tt / 10 * 10 + i;
if (tt % 7 == 0)
{
cout << tt << endl;
return;
}
}
}
}
jiangly思路:n先减去n % 10,然后+9再减去自己取余x的余数 该数便能被x整除(x可为0意外的任意数字),不明白怎么推算出来的 但是还是要记住这个小规律。
void solve()
{
int n;
cin >> n;
if (n % 7 == 0)
{
cout << n << "\n";
}
else
{
n -= n % 10;
n += 9;
n -= n % 7;
cout << n << "\n";
}
}
B. Minority
题意:
你会得到一个字符串s,仅由字符“0”和“1”组成。
您必须选择一个连续的子字符串s并从子字符串中删除该字符的所有出现,这是其中的严格少数。
也就是说,如果子字符串中 ‘0’ 的数量严格小于 ‘1’ 的数量,则从子字符串中删除所有出现的 ‘0’。如果“1”的数量严格小于“0”的数量,请删除所有出现的“1”。如果金额相同,则不执行任何操作。
您必须只应用一次该操作。可以删除的最大字符数是多少?
思路:遍历记数对比一下就可以了
inline void solve()
{
string s;
cin >> s;
int len = s.length();
int sum_0 = 0, sum_1 = 0;
for (int i = 0; i < len; i++)
{
if (s[i] == '0')
sum_0++;
else
sum_1++;
}
if (sum_0 > sum_1)
cout << sum_1 << endl;
else if (sum_1 > sum_0)
cout << sum_0 << endl;
else
cout << sum_0 - 1 << endl;
}
C. Kill the Monster
题意:一个角色和一个怪物之间的战斗过程如下。假设角色最初有健康状况hC和攻击dC;怪物最初有健康状况hM和攻击dM。在战斗前,Monocarp可以花费最多k个金币来升级他的角色的武器和/或盔甲;每次升级都要花费正好一个金币,每次武器升级都会使角色的攻击力增加w,每次盔甲升级都会使角色的健康状况增加a。
思路:贪心+模拟 ACM招新题可以出一出。
inline void solve()
{
cin >> hc >> dc >> hm >> dm >> k >> w >> a;
for (int i = 0; i <= k; i++)
{
int h = hc + a * i;
int d = dc + w * (k - i);
int cm = (hm + d - 1) / d;
int mc = (h + dm - 1) / dm;
if (cm <= mc)
{
cout << "YES" << endl;
return;
}
}
cout << "NO" << endl;
}
D. Make Them Equal
题意:
有一个初始值全为1的
a
a
a数组,你可以进行以下操作。选择序列中的
A
i
A_i
Ai 和 一个数
x
x
x。
A
i
=
A
i
+
a
i
/
x
A_i =A_i+a_i/x
Ai=Ai+ai/x
若多次操作后
A
i
=
B
I
A_i=B_I
Ai=BI,可以获得价值
C
i
C_i
Ci
问经过K次操作后获得的最大价值是多少。
思路:
首先我们发现1变到x最多操作12次,其次这是个01背包。
const int N = 1005;
int dp[N];
inline void solve()
{
int n, k;
cin >> n >> k;
vector<int> b(n), c(n);
for (int i = 0; i < n; i++)
cin >> b[i];
for (int i = 0; i < n; i++)
cin >> c[i];
k = min(k, 12 * n);
vector<int> f(k + 1);
for (int i = 0; i < n; i++)
{
for (int j = k; j >= dp[b[i]]; j--)
{
f[j] = max(f[j], f[j - dp[b[i]]] + c[i]);
}
}
cout << f[k] << endl;
}