Day 7
目录
- 1.字符串中找出连续最长的数字串 (pass)
- 1.1 解析
- 1.2 代码
- 2.岛屿数量 (pass)
- 2.1 解析
- 2.2 代码
- 3.拼三角
- 3.1 解析
- 3.2 代码
1.字符串中找出连续最长的数字串 (pass)
字符串中找出连续最长的数字串
技能:枚举、字符串、双指针
1.1 解析
1.2 代码
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cin>>s;
int begin=-1,len=0;
for(int i=0;i<s.size();i++)
{
if(s[i]>='0'&&s[i]<='9')//找到第一个数字的位置
{
int j=i+1;
while(j<s.size()&&s[j]>='0'&&s[j]<='9')j++;
if(len<j-i)//更新长度
{
len=j-i;
begin=i;
}
i=j;//更新下标
}
}
cout<<s.substr(begin,len);
return 0;
}
2.岛屿数量 (pass)
岛屿数量
技能:dfs/bfs
2.1 解析
2.2 代码
int dx[4]={1,-1,0,0};
int dy[4]={0,0,-1,1};
vector<vector<bool>> vis;
int m,n,ret=0;
void dfs(vector<vector<char>>& grid,int i,int j)
{
vis[i][j]=true;
for(int k=0;k<4;k++)
{
int x=i+dx[k],y=j+dy[k];
if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]=='1'&&!vis[x][y])
dfs(grid,x,y);
}
}
int solve(vector<vector<char> >& grid) {
m=grid.size(),n=grid[0].size();
vis=vector<vector<bool>>(m,vector<bool>(n));
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(grid[i][j]=='1'&&!vis[i][j])
{
ret++;
dfs(grid,i,j);
}
}
}
return ret;
}
3.拼三角
拼三角
技能:枚举
3.1 解析
3.2 代码
//1.三重循环
int main()
{
int t=0;
cin>>t;
int nums[6]={0};
while(t--)
{
int flag=0;//标记位
for(int i=0;i<6;i++)cin>>nums[i];
sort(nums,nums+6);
for(int i=0;i<4;i++)
{
for(int j=i+1;j<5;j++)
{
for(int k=j+1;k<6;k++)
{
if(nums[i]+nums[j]>nums[k])//组成三角形成功
{
int a=0,b=0,c=0;
int t1=nums[i],t2=nums[j],t3=nums[k];
nums[i]=nums[j]=nums[k]=0;
for(auto& x:nums)
{
if(a==0&&x)a=x;
else if(b==0&&x)b=x;
else if(c==0&&x)c=x;
}
if(a+b>c)
{
flag=1;
cout<<"Yes"<<endl;
break;
}
//恢复线程
nums[i]=t1,nums[j]=t2,nums[k]=t3;
}
}
if(flag==1)break;
}
if(flag==1)break;
}
if(flag==0)cout<<"No"<<endl;
}
return 0;
}
//2.优化后的枚举
int nums[6];
int main()
{
int t=0;
cin>>t;
while(t--)
{
for(int i=0;i<6;i++) cin>>nums[i];
sort(nums,nums+6);
if(nums[0]+nums[1]>nums[2]&&nums[3]+nums[4]>nums[5]||
nums[0]+nums[2]>nums[3]&&nums[1]+nums[4]>nums[5]||
nums[0]+nums[3]>nums[4]&&nums[1]+nums[2]>nums[5]||
nums[0]+nums[4]>nums[5]&&nums[1]+nums[2]>nums[3])
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}