广演智算先锋-算法程序设计大赛
寻找特殊的字母
考试时候的代码
#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组织
输入:
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发现大陆
输入:
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初等数学
输入:
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合理开超市
#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大树的幸运年
输入
5
1 1
2 1
2 2
3 2
4 4
比赛时想代码
#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最大的最小值 输入
3
6 3
0 3 2 1 5 2
6 2
1 3 4 1 0 2
4 5
2 5 10 3