A.骰子魔术
#include<iostream>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int j;
for(int i=1;i<=n;i++)
{
cin>>j;
if(j==m)
{
cout<<"YES";
return 0;
}
}
cout<<"NO";
return 0;
}
B. 最少剩几个?
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
if(n==1)
{
cout<<1;
return 0;
}
int a;
int ji=0,ou=0;
for(int i=1;i<=n;i++)
{
cin>>a;
if(a%2==1)
{
ji++;
}
else
{
ou++;
}
}
if(ji>ou)
{
ji-=ou;
cout<<ji%2;
}
else if(ji==ou)
{
cout<<0;
}
else
{
cout<<ou-ji;
}
return 0;
}
C.两个函数
#include<iostream>
using namespace std;
typedef long long ll;
void kind(ll a,ll x)
{
ll sum=0;
a=a%998244353;
if(x==1)
{
cout<<a<<endl;
}
else
{
x=x-1;
a=a*a%998244353;
int j=0;
if(x%2==0)
{
j=((1+x)*(x/2))%998244353;
}
else
{
j=((1+x)/2*x)%998244353;
}
cout<<(a*j)%998244353<<endl;
}
}
int main()
{
ll n;
ll a,x;
cin>>n;
while(n--)
{
cin>>a>>x;
kind(a,x);
}
}
D.切割 01 串 2.0
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
int maxCutting(string& s, int L, int R) {
int n = s.size();
vector<vector<int> > dp(n, vector<int>(n, 0));
vector<vector<int> > count(n, vector<int>(n, 0));
vector<vector<int> > count1(n, vector<int>(n, 0));
for (int i = 0; i < n; ++i) {
count[i][i] = (s[i] == '0') ? 1 : 0;
for (int j = i + 1; j < n; ++j) {
count[i][j] = count[i][j - 1] + ((s[j] == '0') ? 1 : 0);
}
}
for (int i = 0; i < n; ++i) {
count1[i][i] = (s[i] == '1') ? 1 : 0;
for (int j = i + 1; j < n; ++j) {
count1[i][j] = count1[i][j - 1] + ((s[j] == '1') ? 1 : 0);
}
}
for (int len = 2; len <= n; ++len) {
for (int i = 0; i + len - 1 < n; ++i) {
int j = i + len - 1;
for (int k = i; k < j; ++k) {
int leftCount = count[i][k];
int rightCount = count1[k + 1][j];
if (abs(leftCount - rightCount) >= L && abs(leftCount - rightCount) <= R) {
dp[i][j] = max(dp[i][j],dp[i][k] + dp[k + 1][j] + 1);
}
}
}
}
return dp[0][n - 1];
}
int main() {
int n, L, R;
cin >> n >> L >> R;
string s;
cin >> s;
int maxCuts = maxCutting(s,L, R);
cout << maxCuts << endl;
return 0;
}