1、找出字符串中能组成“Good”的个数有几个,不能改变字符在串中的相对位置
#include
using namespace std;
int a[100001];
int main(){
string s;
int i,min,sum,j,k,flag;
getline(cin,s);
for(i=0;i<100001;i++) a[i]=0;
sum=0;
// flag=0;
for(i=0;i<s.size();i++){
if(s[i]=='G'){
flag=0;
for(j=i+1;j<s.size();j++){
if(s[j]=='o'&&flag==0&&a[j]==0){
a[j]=1;
flag=1;
continue;
}
else if(s[j]=='o'&&flag==1&&a[j]==0){
a[j]=1;
for(k=j+1;k<s.size();k++){
if(s[k]=='d'&&a[k]==0){
a[k]=1;
sum++;
break;
}
}
break;
}
}
}
}
cout<<sum<<endl;
}
2、给一个矩阵,每个位置可上下左右移动,问,在移动过程中,存在数字成升序的最长个数是几。
#include
using namespace std;
void dfs(int x,int y,int num,int sum);
int Max,m,n;
int a[40002][40002];
int main(){
int i,j;
cin>>n>>m;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
cin>>a[i][j];
}
}
Max=0;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
dfs(i,j,-100000,0);
}
}
cout<<Max<<endl;
}
void dfs(int x,int y,int num,int sum){
if(x<0||x>=n||y<0||y>=m) return;
if(a[x][y]>num){
sum++;
}
else{
if(sum>Max) Max=sum;
return;
}
dfs(x-1,y,a[x][y],sum);
dfs(x+1,y,a[x][y],sum);
dfs(x,y-1,a[x][y],sum);
dfs(x,y+1,a[x][y],sum);
}
3、给一序列区间,问最少去掉几个区间能使这些区间不相交
int eraseOverlapIntervals(int** intervals, int intervalsRowLen, int* intervalsColLen ) {
// write code here
int m,tmp,n,x,i,j;
m=intervalsRowLen;
for(i=0;i<m;i++){
for(j=i+1;j<m;j++){
if(intervals[i][0]>intervals[j][0]){
tmp=intervals[i][0];
intervals[i][0]=intervals[j][0];
intervals[j][0]=tmp;
tmp=intervals[i][1];
intervals[i][1]=intervals[j][1];
intervals[j][1]=tmp;
}
if(intervals[i][0]==intervals[j][0]&&intervals[i][1]>intervals[j][1]){
tmp=intervals[i][1];
intervals[i][1]=intervals[j][1];
intervals[j][1]=tmp;
}
}
}
n=0;
x=0;
for(i=1;i<m;i++){
if(intervals[i][0]<intervals[x][1]){
n++;
}
else x=i;
}
return n;
}