目录
072:笨小孩
题目链接:[NOIP2008]笨小猴_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
1.哈希记录每个字符出现的次数,记录出现次数最多和最少的字符,得出差值
2.判断质数函数
bool isprim(int x) { if(x<2) return false; for(int i=2;i<x;i++) { if(x%i==0) return false; } return true; }
#include <iostream>
#include<string>
#include<unordered_map>
using namespace std;
string s;
bool isprim(int x)
{
if(x<2) return false;
for(int i=2;i<x;i++)
{
if(x%i==0) return false;
}
return true;
}
int main()
{
cin>>s;
unordered_map<char,int> cnt;
int maxn=0,minn=100;
for(auto ch : s)
{
cnt[ch]++;
}
for(auto ch : s)
{
maxn=max(maxn,cnt[ch]);
minn=min(minn,cnt[ch]);
}
int num=maxn-minn;
if(isprim(num))
{
cout<<"Lucky Word"<<endl;
cout<<num<<endl;
}
else
{
cout<<"No Answer"<<endl;
cout<<0<<endl;
}
return 0;
}
073:主持人调度
题目链接:主持人调度(一)_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
1.左端点排序
2.判断相邻两个区间是否重叠
class Solution {
public:
bool hostschedule(vector<vector<int> >& schedule)
{
sort(schedule.begin(),schedule.end());
for(int i=0;i<schedule.size()-1;i++)
{
if(schedule[i][1]>schedule[i+1][0])
{
return false;
}
}
return true;
}
};
074:分割等和子集
题目链接:分割等和子集_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
01背包问题:
#include <iostream>
using namespace std;
int n,sum=0;
int arr[510],dp[510][100];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>arr[i];
sum+=arr[i];
}
if(sum%2!=0) cout<<"false"<<endl;
else
{
int half=sum/2;
for(int i=1;i<=n;i++)
{
for(int j=arr[i];j<=half;j++)
{
dp[i][j]=max(dp[i-1][j],dp[i-1][j-arr[i]]+arr[i]);
if(dp[i][j]==half)
{
cout<<"true"<<endl;
return 0;
}
}
}
}
return 0;
}
//空间优化
#include <iostream>
using namespace std;
int n,sum=0;
int arr[510];
//int dp[510][100];
int dp[50010]; //注意数据范围
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>arr[i];
sum+=arr[i];
}
if(sum%2!=0) cout<<"false"<<endl;
else
{
int half=sum/2;
for(int i=1;i<=n;i++)
{
for(int j=half;j>=arr[i];j--)
{
dp[j]=max(dp[j],dp[j-arr[i]]+arr[i]);
if(dp[j]==half)
{
cout<<"true"<<endl;
return 0;
}
}
}
}
return 0;
}