文章目录
前言
练习了很多场cf都没有好好的总结了,以后还是是不是总结一下每一场出现的问题,无论是解题经验还是解题时的心态问题,都是十分重要的,要避免重复问题出现。
一、A. Div. 7
A题戳这里
题解:
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 2e6 + 10;
int main()
{
int T;
cin >> T;
while (T--)
{
int n;
cin >> n;
if(n%7==0)
cout << n << endl;
else{
for (int i = 0; i < 10;i++){
n /= 10;
n = n * 10 + i;
if(n%7==0){
cout << n << endl;
break;
}
}
}
}
return 0;
}
二、B. Minority
B题戳这里
题解:
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 2e6 + 10;
int main()
{
int T;
cin >> T;
while (T--)
{
string s;
cin >> s;
int a = 0, b = 0;
for (int i = 0; i < s.size();i++){
if(s[i]=='0')
a++;
else
b++;
}
if(a==b)
cout << max(a - 1, 0) << endl;
else
cout << min(a, b) << endl;
}
return 0;
}
C. Kill the Monster
C题戳这里
题解:
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 2e6 + 10;
int main()
{
int T;
cin >> T;
while (T--)
{
ll hc, dc, hm, dm;
cin >> hc >> dc >> hm >> dm;
ll k, w, a;
cin >> k >> w >> a;
int flag = 0;
for (int i = 0; i <= k; i++)
{
int j = k - i;
ll t1 = (hc + i * a) / dm, t2 = hm / (dc + j * w);
if ((hc + i * a) % dm)
t1++;
if (hm % (dc + j * w))
t2++;
if (t1 >= t2)
{
flag = 1;
break;
}
}
if (flag)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
D. Make Them Equal
D题戳这里
题解:
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
ll w[N], dp[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
memset(w, 0x3f3f3f3f, sizeof(w));
w[1] = 0;
for (int i = 1; i <= 1000; i++)
{
for (int j = 1; j <= i; j++)
w[i + i / j] = min(w[i + i / j], w[i] + 1);
}
int T;
cin >> T;
while (T--)
{
int n, k;
cin >> n >> k;
k = min(k, 12 * n);
ll b[N], c[N];
for (int i = 1; i <= n; i++)
{
cin >> b[i];
b[i] = w[b[i]];
}
for (int i = 1; i <= n; i++)
cin >> c[i];
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n; i++)
{
for (int j = k; j >= b[i]; j--)
{
dp[j] = max(dp[j], dp[j - b[i]] + c[i]);
}
}
cout << dp[k] << endl;
}
return 0;
}
总结
老毛病:1.记得删掉测试freopen
2.记得开long long