A题
解题思路:
从n为奇数开始写。
示例代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
long long n;
cin >> n;
cout << (n + 2) / 2 << endl;
}
}
B题
解题思路:
构造。不过必须要注意,构造的时候只需要用这些木棒构成长方形和正方形的周长部分即可,并且每条边只能放一根木棒。
示例代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
long long num[100005];
int main()
{
int n;
cin >> n;
for(ll i = 0;i < n;i++)
{
ll x;
cin >> x;
num[x]++;
}
ll cas2 = 0,cas4 = 0;
for(ll i = 1;i <= 100000;i++)
{
cas2 += num[i] / 2;
if(num[i] > 3) cas4++;
}
ll q;
cin >> q;
while(q--)
{
char c;
ll x;
cin >> c >> x;
if(c == '-')
{
if(num[x] == 4) cas4--;
if(num[x] % 2 == 0) cas2--;
num[x]--;
}
else
{
if(num[x] == 3) cas4++;
if(num[x] % 2) cas2++;
num[x]++;
}
if(cas4 && cas2 > 3) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
C题
解题思路:
贪心。这题不太难,就正常贪心然后再模拟就ok了。
示例代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
ll n;
cin >> n;
vector<ll>num(n + 1,0);
ll Max = 0;
for(ll i = 0;i < n;i++)
{
ll x;
cin >> x;
num[x]++;
Max = max(Max,num[x]);
}
ll = cnt0;
for(ll i = 1;i <= n;i++)
if(num[i] == Max) cnt++;
cnt += (n - Max * cnt) / (Max - 1);
cout << cnt - 1 << endl;
}
}
D题
解题思路:
这道题原本我是想弄一个暴力搜索,结果搜着搜着发现好像会超时。于是又想弄dp但最后还是没弄出来。最后翻了一些大佬的题解,懂了一些但是还是没有完全懂。
示例代码:
无
E题
解题思路:
这道题有两个版本。但是我连题目也没看懂。不知道该怎么做。也没有什么大佬写这题题解。好难。
示例代码:
无
总结
这回做的很一般。个人认为不太好。下次加油吧。