【入门4】数组【完结】

P1428 小鱼比可爱

在这里插入图片描述
https://www.luogu.com.cn/problem/P1428

#include<cstdio>
#include<iostream>
using namespace std;
int a[105],b[105];
int main(void)
{
	int n; cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	b[0]=0;
	for(int i=1;i<n;i++)
	{
		int cnt=0;
		for(int j=0;j<i;j++)
			if(a[i]>a[j]) cnt++;
		b[i]=cnt;
	}
	for(int i=0;i<n;i++) cout<<b[i]<<" ";
	return 0;
}

P1427 小鱼的数字游戏

在这里插入图片描述
https://www.luogu.com.cn/problem/P1427

#include<cstdio>
#include<iostream>
using namespace std;
int a[105];
int main(void)
{
	int n=-1;
	while(cin>>a[++n],a[n]);
	for(int i=n-1;i>=0;i--) cout<<a[i]<<" ";
	return 0;
}

P5727 【深基5.例3】冰雹猜想

在这里插入图片描述
https://www.luogu.com.cn/problem/P5727

#include<cstdio>
#include<iostream>
using namespace std;
int a[105];
int main(void)
{
	int n; cin>>n;
	int temp=n;
	int num=0;
	while(n!=1)
	{
		if(n%2==0) 
		{
			n/=2;
			a[num++]=n;
			continue;	
		}
		else
		{
			n=n*3+1;
			a[num++]=n;
		}
	}
	for(int i=num-1;i>=0;i--) cout<<a[i]<<" ";
	cout<<temp;
	return 0;
}

P1047 [NOIP2005 普及组] 校门外的树

在这里插入图片描述
https://www.luogu.com.cn/problem/P1047

注意树的下标是从0开始的,故共有(l+1)颗树

#include<cstdio>
#include<iostream>
#include<map>
#include<algorithm>
#include<vector>
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
vector<PII> ve;
int l,m;
int main(void)
{
	cin>>l>>m;
	while(m--)
	{
		int a,b;
		cin>>a>>b;
		ve.push_back({a,b});
	}
	sort(ve.begin(),ve.end());
	int ans=0;
	int startx=ve[0].x,endx=ve[0].y;
	for(int i=1;i<ve.size();i++) 
	{
		if(ve[i].x>endx) 
		{
			ans+=endx-startx+1;
			startx=ve[i].x,endx=ve[i].y;
		}
		if(ve[i].y<=endx) continue;
		else endx=ve[i].y;
	}
	ans+=endx-startx+1;
	cout<<l-ans+1<<endl;
	return 0;
}

P5728 【深基5.例5】旗鼓相当的对手

在这里插入图片描述
https://www.luogu.com.cn/problem/P5728

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
struct student
{
	int a,b,c,sum;
}stu[1005];
bool judge(student a,student b)
{
	if(abs(a.a-b.a)>5) return false;
	if(abs(a.b-b.b)>5) return false;
	if(abs(a.c-b.c)>5) return false;
	if(abs(a.a+a.b+a.c-b.a-b.b-b.c)>10) return false;
	return true;
}
int ans;
int main(void)
{
	int n; cin>>n;
	for(int i=0;i<n;i++) cin>>stu[i].a>>stu[i].b>>stu[i].c,stu[i].sum=stu[i].a+stu[i].b+stu[i].c;
	for(int i=0;i<n;i++)
		for(int j=i+1;j<n;j++)
			if(judge(stu[i],stu[j]))  ans++;
	cout<<ans<<endl;
	return 0;
}

P5729 【深基5.例7】工艺品制作

在这里插入图片描述
https://www.luogu.com.cn/problem/P5729

#include<cstdio>
#include<iostream>
using namespace std;
bool a[25][25][25];
int main(void)
{
	int w,x,h; cin>>w>>x>>h;
	int q; cin>>q;
	while(q--)
	{
		int x1,x2,y1,y2,z1,z2; cin>>x1>>y1>>z1>>x2>>y2>>z2;
		for(int i=x1;i<=x2;i++)
			for(int j=y1;j<=y2;j++)
				for(int k=z1;k<=z2;k++)
					a[i][j][k]=true;
	}
	int ans=0;
	for(int i=1;i<=w;i++)
		for(int j=1;j<=x;j++)
			for(int k=1;k<=h;k++)
				if(!a[i][j][k]) ans++;
	cout<<ans<<endl;
	return 0;
}

P2550 [AHOI2001]彩票摇奖

在这里插入图片描述

https://www.luogu.com.cn/problem/P2550

#include<cstdio>
#include<iostream>
using namespace std;
int n;
int ans[8];
int a[40];
bool hush[40];
int main(void)
{
	cin>>n;
	for(int i=0;i<7;i++) cin>>a[i],hush[a[i]]=true;
	while(n--)
	{
		int number,temp=0;
		for(int i=0;i<7;i++)
		{
			cin>>number;
			if(hush[number] ) temp++;
 		}
 		ans[temp]++;
	}
	for(int i=7;i>=1;i--) cout<<ans[i]<<" ";
	return 0;
}

P2615 [NOIP2015 提高组] 神奇的幻方

在这里插入图片描述
https://www.luogu.com.cn/problem/P2615

#include<cstdio>
#include<iostream>
using namespace std;
int a[50][50];
int main(void)
{
	int n; cin>>n;
	int ans=1;
	a[1][n/2+1]=ans;
	int startx=1,starty=n/2+1;
	while(ans<=n*n)
	{
		ans++;
		if(startx==1&&starty!=n) 
		{
			startx=n,starty=starty+1,a[startx][starty]=ans;
			continue;
		}
		if(starty==n&&startx!=1)
		{
			startx--,starty=1;
			a[startx][starty]=ans;
			continue;
		}
		if(startx==1&&starty==n)
		{
			startx++;
			a[startx][starty]=ans;
			continue;
		}
		if(!a[startx-1][starty+1]) startx--,starty++,a[startx][starty]=ans;
		else startx++,a[startx][starty]=ans;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			cout<<a[i][j]<<" ";
		cout<<endl;
	}
	return 0;
} 

P5730 【深基5.例10】显示屏

在这里插入图片描述
https://www.luogu.com.cn/problem/P5730

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
string a[10][5]={
{"XXX","X.X","X.X","X.X","XXX"},//0
{"..X","..X","..X","..X","..X"},//1
{"XXX","..X","XXX","X..","XXX"},//2
{"XXX","..X","XXX","..X","XXX"},//3
{"X.X","X.X","XXX","..X","..X"},//4
{"XXX","X..","XXX","..X","XXX"},//5
{"XXX","X..","XXX","X.X","XXX"},//6
{"XXX","..X","..X","..X","..X"},//7
{"XXX","X.X","XXX","X.X","XXX"},//8
{"XXX","X.X","XXX","..X","XXX"}//9
};
string ans[5];
int main(void)
{
	int n;  cin>>n;
	string m; cin>>m;
	for(int i=0;i<5;i++)
	{
		for(int j=0;j<n;j++)
		{
			int t=m[j]-'0';
			ans[i]+=a[t][i];
			if(j!=(n-1)) ans[i]+='.';
		}
	} 
	for(int i=0;i<5;i++) cout<<ans[i]<<endl;
	return 0;
}

P1554 梦中的统计

在这里插入图片描述
https://www.luogu.com.cn/problem/P1554

#include<cstdio>
#include<iostream>
using namespace std;
int hush[10];
int main(void)
{
	int m,n; cin>>m>>n;
	for(int i=m;i<=n;i++)
	{
		int temp=i;
		while(temp)
		{
			int t=temp%10;
			hush[t]++;
			temp/=10;
		}
	}
	for(int i=0;i<=9;i++) cout<<hush[i]<<" ";
}

P2141 [NOIP2014 普及组] 珠心算测验

在这里插入图片描述
需要注意的一点是,如果一个数多次的拼出,只算一次

#include<cstdio>
#include<iostream>
using namespace std;
int a[105];
int ans;
bool hush[30000];
int main(void)
{
	int n; cin>>n;
	for(int i=0;i<n;i++) cin>>a[i],hush[a[i]]=true;
	for(int i=0;i<n;i++)
		for(int j=i+1;j<n;j++)
			if(hush[a[i]+a[j]]&&a[i]!=a[j]) ans++,hush[a[i]+a[j]]=false;//保证只算了一次
	cout<<ans<<endl;
 	return 0;
} 

P1614 爱与愁的心痛

在这里插入图片描述
https://www.luogu.com.cn/problem/P1614

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[10005];
int ans=99999;
int main(void)
{
	int n,m;  cin>>n>>m;
	for(int i=0;i<n;i++) cin>>a[i];
	for(int i=0;i<n;i++)
	{
		int temp=0;
		for(int j=i;(i+m-1)<n&&j<=(i+m-1);j++)
		{
			temp+=a[j];
		}
		if(temp!=0)ans=min(ans,temp);
	}
	if(m)cout<<ans<<endl;
	else cout<<0<<endl;
	return 0;
}

P2911 [USACO08OCT]Bovine Bones G

在这里插入图片描述
https://www.luogu.com.cn/problem/P2911

#include<cstdio>
#include<iostream>
using namespace std;
int hush[1000];
int ans=0;
int index=0;
int main(void)
{
	int s1,s2,s3; cin>>s1>>s2>>s3;
	for(int i=1;i<=s1;i++)
		for(int j=1;j<=s2;j++)
			for(int k=1;k<=s3;k++)
				hush[i+j+k]++;
	for(int i=1;i<=1000;i++)
		if(ans<hush[i]) ans=hush[i],index=i;
	cout<<index<<endl;
	return 0;
}

P1161 开灯

在这里插入图片描述
https://www.luogu.com.cn/problem/P1161

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
const int N=2000005; 
bool a[N]={false};
int main(void)
{
	int n; cin>>n;
	while(n--)
	{
		double m; int t;  cin>>m>>t;
		for(int i=1;i<=t;i++)
		{
			int temp=m*i;
			a[temp]=!a[temp];
		}
	}
	for(int i=1;i<=N;i++)
	{
		if(a[i])
		{
			cout<<i<<endl;
			break;
		}
	}
	return 0;
} 

P5731 【深基5.习6】蛇形方阵

在这里插入图片描述
https://www.luogu.com.cn/problem/P5731

#include<cstdio>
#include<iostream>
using namespace std;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int a[10][10];
int ans=1;
int main(void)
{
	int n; cin>>n;
	int d=0;
	a[0][0]=1;
	int x=0,y=0;
	while(ans<n*n)
	{
	
		x=x+dx[d],y=y+dy[d];
		if(x<0||x>=n||y<0||y>=n||a[x][y]) //碰到边或者走过了,就转向 
		{
			x=x-dx[d],y=y-dy[d];
			d=(d+1)%4;
			x=x+dx[d],y=y+dy[d];
		}
		a[x][y]=++ans;
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
			printf("%3d",a[i][j]);
		cout<<endl; 
	}	
	return 0;
}

P5732 【深基5.习7】杨辉三角

在这里插入图片描述
https://www.luogu.com.cn/problem/P5732

#include<cstdio>
#include<iostream>
using namespace std;
int a[25][25];
int main(void)
{
	int n; cin>>n;
	a[1][1]=1;
	for(int i=2;i<=n;i++)
		for(int j=1;j<=i;j++)
			a[i][j]=a[i-1][j-1]+a[i-1][j];
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=i;j++)
			cout<<a[i][j]<<" ";
		cout<<endl;
	}
	return 0;
} 

P1789 【Mc生存】插火把

在这里插入图片描述
https://www.luogu.com.cn/problem/P1789

#include<cstdio>
#include<iostream>
using namespace std;
bool a[10005][10005];
bool b[10005][10005];
int n,m,k; 
int ans;
int dx1[20]={0,-1,-1, 1,1, 0, 0,0,0,-2,-1,1,2};
int dy1[20]={0,-1, 1,-1,1,-2,-1,1,2, 0, 0,0,0};
int dx2[25]={-2,-2,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2};
int dy2[25]={-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0,  1,2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2};
void f1(int x,int y)
{
	a[x][y]=true;
	for(int i=0;i<13;i++)
	{
		int tempx=x+dx1[i],tempy=y+dy1[i];
		if(tempx>=1&&tempx<=n&&tempy>=1&&tempy<=n) a[tempx][tempy]=true;
	}
}
void f2(int x,int y)
{
	a[x][y]=true;
	for(int i=0;i<25;i++)
	{
		int tempx=x+dx2[i],tempy=y+dy2[i];
		if(tempx>=1&&tempx<=n&&tempy>=1&&tempy<=n) a[tempx][tempy]=true;
	}
}
int main(void)
{
	cin>>n>>m>>k;
	while(m--)
	{
		int x,y; cin>>x>>y;
		f1(x,y);
	}
	while(k--)
	{
		int x,y; cin>>x>>y;
		f2(x,y); 
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++) 
			if(!a[i][j]) ans++;
	cout<<ans<<endl;
	return 0;
}

P1319 压缩技术

在这里插入图片描述
https://www.luogu.com.cn/problem/P1319

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
bool flag=false;
string s;
int main(void)
{
	int n; cin>>n;
	int a;
	s+=" ";//让下标从1开始
	while(cin>>a)
	{
		while(a--)
		{
			if(!flag) s+='0';
			else s+='1';
		} 
		flag=!flag;
	}
	for(int i=1;i<s.size();i++)
	{
		cout<<s[i];
		if(i&&i%n==0) cout<<endl;
	} 
	return 0;
}

P1320 压缩技术(续集版)

在这里插入图片描述
https://www.luogu.com.cn/problem/P1320

#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
vector<string>ve; 
int main(void)
{
	string s;
	while(cin>>s) ve.push_back(s);
	cout<<ve.size()<<" ";
	string ans;
	for(int i=0;i<ve.size();i++) ans+=ve[i];
	if(ans[0]!='0') cout<<0<<" ";//如果开头不是0 那么输出零
	int cnt=1;
	for(int i=1;i<ans.size();i++)
	{
		if(ans[i]!=ans[i-1])
		{
			cout<<cnt<<" "; 
			cnt=0;
		}
		cnt++;
	}
	cout<<cnt;
	return 0;
} 

P1205 [USACO1.2]方块转换 Transformations

在这里插入图片描述
https://www.luogu.com.cn/problem/P1205

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
char a[15][15];
char b[15][15];
char ans[15][15];
int n;
int m=0;
bool flag=false;
bool work1()//90
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			b[i][j]=a[n-1-j][i];
			if(b[i][j]=='@'||ans[i][j]=='@')
			if(b[i][j]!=ans[i][j]) return false;
		}
	}
	return true;
}
bool work2()//180
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			b[i][j]=a[n-1-j][i];
		}
	}
	char c[15][15];
	memcpy(c,b,sizeof b);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			b[i][j]=c[n-1-j][i];
			if(b[i][j]=='@'||ans[i][j]=='@')
			if(b[i][j]!=ans[i][j]) return false;
		}
	}
	return true;
}
bool work3()//270
{
	for(int i=0;i<n;i++)//转一次 
		for(int j=0;j<n;j++)
			b[i][j]=a[n-1-j][i];
	char c[15][15];
	memcpy(c,b,sizeof b);//转两次 
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			b[i][j]=c[n-1-j][i];
	memcpy(c,b,sizeof b);
	for(int i=0;i<n;i++)//转三次 
	{
		for(int j=0;j<n;j++)
		{
			b[i][j]=c[n-1-j][i];
			if(b[i][j]=='@'||ans[i][j]=='@')
			if(b[i][j]!=ans[i][j]) return false;
		}
	}
	return true;
}
bool work4()
{
	memcpy(b,a,sizeof a);
	int temp=n/2;
	for(int j=0;j<temp;j++)//左边 
		for(int i=0;i<n;i++)
			b[i][j]=a[i][n-1-j];
	for(int j=0;j<temp;j++)//右边 
		for(int i=0;i<n;i++)
			b[i][n-1-j]=a[i][j];
			
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			if(b[i][j]=='@'||ans[i][j]=='@')
			if(b[i][j]!=ans[i][j]) return false;
	return true;
}
bool work5()
{
	memcpy(b,a,sizeof a);//水平 
	int temp=n/2;
	for(int j=0;j<temp;j++)//左边 
		for(int i=0;i<n;i++)
			b[i][j]=a[i][n-1-j];
	for(int j=0;j<temp;j++)//右边 
		for(int i=0;i<n;i++)
			b[i][n-1-j]=a[i][j];
	memcpy(a,b,sizeof b);
	if(work1()) return true;
	if(work2()) return true;
	if(work3()) return true;
	return false;
}
bool work6()
{
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			if(a[i][j]!=ans[i][j]) return false;
	return true;
}
int main(void)
{
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	for(int i=0;i<n;i++) cin>>ans[i];
	if(!flag) if(work1()) m=1,flag=true;
	if(!flag) if(work2()) m=2,flag=true;
	if(!flag) if(work3()) m=3,flag=true;
	if(!flag) if(work4()) m=4,flag=true;
	if(!flag) if(work5()) m=5,flag=true;
	if(!flag) if(work6()) m=6,flag=true;
	if(!flag) m=7,flag=true;
	cout<<m<<endl;
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值