string numberstr=to_string(number);
numberstr=numberstr.substr(0,numberstr.length()-1)
int number=stoi(numberstr)
给定一个长度为 n 的序列,给定一个操作,选定一个位置 i ,使得区间 [1,i] 的数据加1,区间 [i+1,n] 的数据减1,至少需要多少次操作使得这个序列不再是单调不下降子序列。
bool decrease=true;
for(int i=0;i<n-1;i++)
{
if(a[i]>a[i+1])
{
decrease=false;
break;
}
}
if(!decrease)
cout<<0<<endl;
else
{
int diff[505];
for(int i=0;i<n-1;i++)
{
diff[i]=a[i+1]-a[i];
}
int min=*min_element(diff,diff+n-1);
cout<<min/2+1<<endl;
}
小红拿到了一个字符串,她准备将一些字母变成白色,变成白色的字母看上去就和空格一样,这样字符串就变成了一些单词。
现在小红希望,每个单词都满足以下两种情况中的一种:
1.开头第一个大写,其余为小写(长度为 1 的大写字母也是合法的)。
2.所有字符全部是小写。
小红想知道,最少需要将多少字母变成白色?
#include<bits/stdc++.h>
using namespace std;
bool upperCase(char ch)
{
if(ch>='A'&&ch=<'Z')
return true;
}
bool lowerCase(char ch)
{
if(ch>='a'&&ch=<'z')
return true;
}
int main()
{
string s;
cin>>s;
for(int i=0;i<s.size();i++)
{
if(upperCase(s[i])&&s[i-1]!=' ')
{
sum++;
s[i]=' ';
}
}
cout<<sum;
}
for(int j=0;j<m;j++)
{
k^=d[0][j];
}
for(int i=1;i<n;i++)
{
int data=0;
for(int j=0;j<m;j++)
{
data^=d[i][j];
}
if(data!=k){
cout<<"wrong answer"<<endl;
return;
}
}
for(int i=0;i<m;i++)
{
int data=0;
for(int j=0;j<n;j++)
{
data^=d[j][i];
}
if(data!=k){
cout<<"wrong answer"<<endl;
return;
}
}
大小写匹配
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<unordered_map>
#define LL long long
using namespace std;
int main()
{
LL n, k;
cin >> n >> k;
string s;
cin >> s;
vector<int> lowerCase;
vector<int> upperCase;
int count = 0;
for (char c : s)
{
if (islower(c))
{
lowerCase.push_back(c - 'a');
}
else
{
upperCase.push_back(c - 'A');
}
}
for (int i = 0; i < lowerCase.size(); i++)
{
for (int j = 0; j < upperCase.size(); j++)
{
if (lowerCase[i] == upperCase[j])
{
count++;
lowerCase[i] = -1;
upperCase[j] = -1;
break;
}
}
}
unordered_map<int, int> charCount;
for (int i = 0; i < lowerCase.size(); i++)
{
if (lowerCase[i] != -1 && k > 0)
{
charCount[lowerCase[i]]++;
if (charCount[lowerCase[i]] >= 2)
{
k--;
count++;
}
}
}
for (int j = 0; j < upperCase.size(); j++)
{
if (upperCase[j] != -1 && k > 0)
{
charCount[upperCase[j]]++;
if (charCount[upperCase[j]] >= 2)
{
k--;
count++;
}
}
}
cout << count;
return 0;
}
原思路是把大小写按容器分离,根据字符转化比较两个容器的值,然后再比较两个容器自身的值是否有相同的,但是超时了(囧),所以优化了一下
for(i=0;i<n;i++){
if(s[i]>='A'&&s[i]<='Z')
a[s[i]-'A']++;
if(s[i]>='a'&&s[i]<='z')
b[s[i]-'a']++;
}
int count=0;
for(int i=0;i<26;i++)
{
count+=min(a[i],b[i]);
more+=abs(a[i]-b[i])/2;
}
count+=min(k,more);
平衡分组
#include <bits/stdc++.h>
using namespace std;
const int N = 310;
const int M = 200010;
const int mx = 200000;
int a[N];
int n, sum, v[M];
int main()
{
ios :: sync_with_stdio(false);
cin >> n;
v[0] = 1;
for(int i = 1; i <= n; i++)
{
cin >> a[i];
sum += a[i];
}
int ans = mx;
for(int i = 1;i <= n;i ++)
for(int j = mx;j >= a[i];j --)
if(v[j - a[i]]) v[j] = 1;
for(int i = 1;i <= sum;i ++)
if(v[i]) ans = min(ans,abs(sum - 2*i));
cout<<ans;
return 0;
}