广演智算先锋-算法程序设计大赛

寻找特殊的字母

alt 考试时候的代码

#include<bits/stdc++.h>
using namespace std;
string s;
int a1[100];
int ans=0;
int main(){
	cin>>s;
//	int a=s[0]-'A';
	for(int i=0;i<s.size();i++){
		int a=s[i]-'A';
		a1[a]++;
	}
	if(a1[0]>=1&&a1[32]>=1)ans++;
	if(a1[1]>=1&&a1[33]>=1)ans++;
	if(a1[2]>=1&&a1[34]>=1)ans++;
	if(a1[3]>=1&&a1[35]>=1)ans++;
	if(a1[4]>=1&&a1[36]>=1)ans++;
	if(a1[5]>=1&&a1[37]>=1)ans++;
	if(a1[6]>=1&&a1[38]>=1)ans++;
	if(a1[7]>=1&&a1[39]>=1)ans++;
	if(a1[8]>=1&&a1[40]>=1)ans++;
	if(a1[9]>=1&&a1[41]>=1)ans++;
	if(a1[10]>=1&&a1[42]>=1)ans++;
	if(a1[11]>=1&&a1[43]>=1)ans++;
	if(a1[12]>=1&&a1[44]>=1)ans++;
	if(a1[13]>=1&&a1[45]>=1)ans++;
	if(a1[14]>=1&&a1[46]>=1)ans++;
	if(a1[15]>=1&&a1[47]>=1)ans++;
	if(a1[16]>=1&&a1[48]>=1)ans++;
	if(a1[17]>=1&&a1[49]>=1)ans++;
	if(a1[18]>=1&&a1[50]>=1)ans++;
	if(a1[19]>=1&&a1[51]>=1)ans++;
	if(a1[20]>=1&&a1[52]>=1)ans++;
	if(a1[21]>=1&&a1[53]>=1)ans++;
	if(a1[22]>=1&&a1[54]>=1)ans++;
	if(a1[23]>=1&&a1[55]>=1)ans++;
	if(a1[24]>=1&&a1[56]>=1)ans++;
	if(a1[25]>=1&&a1[57]>=1)ans++;
cout<<ans<<endl;
	return 0;
}

老师代码

#include<bits/stdc++.h>
using namespace std;
int a[100],ans=0;
int main(){
	string s;
	cin>>s;
	for(int i=0;i<s.size();i++){
		a[s[i]-'A']++;
	}
	for(int i=0;i<25;i++){
		if(a[i]&&a[i+32])ans++;
	}
	cout<<ans;
	return 0;
} 

B寻找k组织

alt 输入:

5
5 4
1 2 4 5 3
5 6
1 2 3 4 100
5 5
1 2 3 5 6
3 2
1 3 3
1 1
1

输出

YES
NO
NO
NO
YES


代码L:

#include<bits/stdc++.h>
using namespace std;
int t,n,k,a[200];
bool f[200];
int main(){
	cin>>t;
	while(t--){
		memset(f,0,sizeof f);
		cin>>n>>k;
        bool p=0;
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
            f[a[i]]=1;
		}
// 		sort(a+1,a+n+1);
		for(int i=1;i<=k;i++){S
		  if(f[i]==0){
              p=1;
		   break;
          }
            
		}
		if(p==1)cout<<"NO"<<endl;
		else cout<<"YES"<<endl;
	}
	
	return 0;
}

C发现大陆

alt 输入:

4 10
0132680033
1035460500
5045600468
0000000012

输出

4

老师的代码:

#include<iostream>
using namespace std;
int n,m,a[200][200];
bool vis[200][200];
int dir[4][2]={0,1,0,-1,1,0,-1,0};
void dfs(int x,int y){
    for(int i=0;i<4;i++){
        int xx = x + dir[i][0];
        int yy = y + dir[i][1];
        if(xx<0||yy<0||xx>=n||yy>=m||a[xx][yy]==0||vis[xx][yy])
            continue;
        vis[xx][yy]=1;
        dfs(xx,yy);
    }
}
int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf("%1d",&a[i][j]);
    int res = 0;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(!vis[i][j]&&a[i][j]!=0){
                vis[i][j]=1;
                dfs(i,j);
                res++;
            }
        }
    }
    cout<<res<<endl;
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,m,a[200][200];
bool vis[200][200];//标记走过的地方 
int dir[4][2]={0,1,0,-1,1,0,-1,0};//上下左右方向 
void dfs(int x,int y){
//	if(x<0||y<0||x>=n||y>=m||a[x][y]=='0')
//	    return;因为走到下面的都是合法的情况所以不需要不合法判断 
	 for(int i=0;i<4;i++){
	 	int xx=x+dir[i][0];
	 	int yy=y+dir[i][1];
	 	if(xx<0||yy<0||xx>=n||yy>=m||a[xx][yy]==0||vis[xx][yy])//遇到非法情况就退出
	 	   continue;
	 	vis[xx][yy]=1;//走过就标记上标记 
	 	dfs(xx,yy);
	 }
}
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++){
			scanf("%1d",&a[i][j]);
		}
	}
	int res=0;//遍历完整块地就加一 
	for(int i=0;i<n;i++){
	   for(int j=0;j<m;j++){
	   	if(!vis[i][j]&&a[i][j]!=0){//如果没有走过的地方就进去遍历 ,并且不可以是湖泊 
	   		    vis[i][j]=1;
	   		    dfs(i,j);
	   		    res++; 
		   }
		   
	   }
	 }
	   cout<<res<<endl;
	return 0;
}

D初等数学

alt 输入:

3 3
111
212
111

输出

38

输入

3 4
1000
0010
0000

输出

12  
#include<bits/stdc++.h>
using namespace std;
bool f[1010][1010][11];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			int x;
			scanf("%1d",&x);//输入数据,然后x也是高度 
			for(int k=1;k<=x;k++){
				f[i][j][k]=1;//标记某个位置是否有方块 
			}
		}
	}
	 int sum=0;   
	for(int k=1;k<=9;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(f[i][j][k]){//要该位置有方块再执行 
				sum+=6;
				if(f[i-1][j][k])sum-=2;//表示当前位置的上一行(前面) 
				if(f[i][j-1][k])sum-=2;// 左边 
				if(f[i][j][k-1])sum-=2;//下面 	
				}
				
			}
		}
	}cout<<sum<<endl;
	return 0;
}

E合理开超市

alt

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,c,a[N];
bool check(int x){
	int cnt=1;//表示放了几个超市 
	int pre=a[0];//第一个超市的位置,后面用pre更新新的超市的位置 
	for(int i=1;i<n;i++){
		if(a[i]-pre>=x){//如果后一个超市可以放新的超市那么就把位置更新 
			pre=a[i];
			cnt++;
		}
	}
	if(cnt>=c)return 1;
	else return 0;
}
int main(){
	cin>>n>>c;
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	sort(a,a+n);
	int l=1,r=1e9+10;
	while(l<r){
		int mid=l+r+1>>1;
		if(check(mid))l=mid;
		else r=mid-1;
	}
	cout<<l<<endl;
	return 0;
}

F大树的幸运年

alt 输入

5
1 1
2 1
2 2
3 2
4 4

alt

比赛时想代码

#include<bits/stdc++.h>
using namespace std;
int t,n,k;
int ans;
int main(){
	cin>>t;
    while(t--){
    	ans=0;
    	cin>>n>>k;
//    	int a=n+k-1;
    	if(k>=n){
    		for(int i=1;i<=n;i++)
    		{
    			ans+=i*i;
			}
		}
		else if(k<n){
			for(int i=n-k+1;i<=n;i++)
			{
				ans+=i*i;
			}
		}
		if(ans%2==0){
			cout<<"YES"<<endl;
		}else{
			cout<<"NO"<<endl;
		}

	}
	
	return 0;
}

G最大的最小值 alt 输入

3
6 3
0 3 2 1 5 2
6 2
1 3 4 1 0 2
4 5
2 5 10 3

alt

全部评论

相关推荐

10-31 16:10
已编辑
南京邮电大学 Java
美团 测开 (N+5000)*15
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务