HJ24 合唱队
最长上升子序列+最长下降子序列结合
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 3010;
int a[N],b[N],c[N];
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int maxx=0;
for(int i=1;i<=n;i++){
b[i]=1;
for(int j=1;j<i;j++){
if(a[i]>a[j]){
b[i]=max(b[i],b[j]+1);
}
}
}
for(int i=n;i>=1;i--){
c[i]=1;
for(int j=i+1;j<=n;j++){
if(a[i]>a[j]){
c[i]=max(c[i],c[j]+1);
}
}
}
for(int i=1;i<=n;i++){
maxx=max(maxx,b[i]+c[i]);
}
cout<<n-maxx+1<<endl;
return 0;
}
HJ20 密码验证合格程序
模拟 按照题目的要求进行模拟
针对不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
从前到后遍历字符串,找到长度为3的子串(temp = substr(i,3)),判断它后面的子串(s = substr(i+3))是否含有它(s.find(temp))
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string solve(string str){
int lower=0,upper=0,alpha=0,other=0;
if(str.size()<=8){
return "NG";
}
for(int i=0;i<str.size();i++){
if(isdigit(str[i])){
alpha=1;
}
else if(isupper(str[i])){
upper=1;
}
else if(islower(str[i])){
lower=1;
}
else{
other=1;
}
}
if((alpha+upper+lower+other)<3){
return "NG";
}
for(int i=0;i<str.size()-3;i++){
string temp = str.substr(i,3);
string s = str.substr(i+3);
if(s.find(temp)!=string::npos){
return "NG";
}
}
return "OK";
}
int main()
{
string str;
while(cin>>str){
cout<<solve(str)<<endl;
}
return 0;
}
HJ21 简单密码
模拟
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void change(string s){
for(int i=0;i<s.size();i++){
if(isdigit(s[i])){
cout<<s[i];
}
else if(islower(s[i])){
if(s[i]>='a' && s[i]<='c'){
cout<<2;
}
else if(s[i]>='d' && s[i]<='f'){
cout<<3;
}
else if(s[i]>='g' && s[i]<='i'){
cout<<4;
}
else if(s[i]>='j' && s[i]<='l'){
cout<<5;
}
else if(s[i]>='m' && s[i]<='o'){
cout<<6;
}
else if(s[i]>='p' && s[i]<='s'){
cout<<7;
}
else if(s[i]>='t' && s[i]<='v'){
cout<<8;
}
else{
cout<<9;
}
}
else if(isupper(s[i])){
if(s[i]>='A' && s[i]<'Z'){
s[i]+=33;
if(s[i]>'z'){
s[i]=s[i]-'z'+'a';
}
cout<<s[i];
}
else{
cout<<'a';
}
}
}
}
int main()
{
string s;
cin>>s;
change(s);
return 0;
}
HJ23 删除字符串中出现次数最少的字符
字符串哈希
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
const int N = 30;
using namespace std;
int main()
{
string s;
string ans;
cin>>s;
map<char,int> cnt;
for(int i=0;i<s.size();i++){
cnt[s[i]]++;
}
int minn=0x3f;
for(int i=0;i<s.size();i++){
if(cnt[s[i]]){
if(cnt[s[i]]<minn){
minn=cnt[s[i]];
}
}
}
for(int i=0;i<s.size();i++){
if(cnt[s[i]]!=minn){
ans+=s[i];
}
}
cout<<ans;
return 0;
}
HJ34 图片整理
字符s对应的数字 s = int(s)
数字x对应的ASCII码 x=char(x)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int cnt[N];
int main()
{
string s;
cin>>s;
int n=s.size();
for(int i=0;i<n;i++){
cnt[i]=int(s[i]);
}
sort(cnt,cnt+n);
for(int i=0;i<s.size();i++){
s[i]=char(cnt[i]);
}
cout<<s;
return 0;
}
HJ55 挑7
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int a[N];
bool check(int x){
if(x%7==0){
return true;
}
while(x){
int tmp=x%10;
if(tmp==7){
return true;
}
x/=10;
}
return false;
}
int main()
{
int n;
cin>>n;
int cnt=0;
for(int i=1;i<=n;i++){
if(check(i)){
cnt++;
}
}
cout<<cnt;
return 0;
}
HJ59 找出字符串中第一个只出现一次的字符
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
bool flag;
int main()
{
string s;
cin>>s;
map<char,int> mp;
for(int i=0;i<s.size();i++){
mp[s[i]]++;
}
for(int i=0;i<s.size();i++){
if(mp[s[i]]==1){
cout<<s[i];
flag=true;
break;
}
}
if(!flag) puts("-1");
return 0;
}
HJ68 成绩排序
#include <iostream>
#include <cstring>
#include <algorithm>
#include<vector>
using namespace std;
typedef struct Data{
int id;
string name;
int value;
};
// 降序排列
bool compare0(Data d1,Data d2){
if(d1.value==d2.value){
return d1.id<d2.id;
}
return d1.value>d2.value;
}
// 升序排列
bool compare1(Data d1,Data d2){
if(d1.value==d2.value){
return d1.id<d2.id;
}
return d1.value<d2.value;
}
int main()
{
int n,flag;
while(cin>>n>>flag){
vector<Data> devc;
int id=1;
string name;
int value;
Data data;
for(int i=0;i<n;i++){
cin>>name>>value;
data.id = id++;
data.name = name;
data.value = value;
devc.push_back(data);
}
if(flag==0){
sort(devc.begin(),devc.end(),compare0);
}
else{
sort(devc.begin(),devc.end(),compare1);
}
for(int i=0;i<n;i++){
cout<<devc[i].name<<" "<<devc[i].value<<endl;
}
}
return 0;
}
HJ90 合法IP
根据样例模拟过的
s = input()
b = s.split(".")
l = len(b)
if l!=4:
print("NO")
else:
flag = False
for i in range(0,l):
cnt=len(b[i])
if b[i]=='':
flag = True
elif (b[i][0]=='0' or b[i][0]=='+' or b[i][0]=='-') and cnt>1:
flag=True
else:
if int(b[i])>255:
flag=True
if flag:
print("NO")
else:
print("YES")