ACM第三周---周训---题目合集.

write in front
个人主页:认真写博客的夏目浅石.CSDN
欢迎各位→点赞 + 收藏⭐️ + 留言​
系列专栏:ACM周训练题目合集.CSDN
总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
✉️为什么我们不知疲倦,因为我们都在做自己所热爱的事 ♐

文章目录

  • write in front
    • ✨A - A AtCoder - abc229_a✨
      • A题目题解
    • ✨B - B AtCoder - abc220_b✨
      • B题目题解
    • ✨C - C HDU - 4811✨
      • C题目题解
    • ✨D - D OpenJ_NOI - CH0105-31✨
      • D题目题解
    • ✨E - E OpenJ_Bailian - 2888 ✨
      • E题目题解
    • ✨F - F AtCoder - abc239_c✨
      • F题目题解
    • ✨G - G HDU - 2032✨
      • G题目题解
    • ✨H - H OpenJ_Bailian - 3253✨
      • H题目题解
    • ✨I - I HDU - 1556 ✨
      • I题目题解
    • ✨J - J HDU - 1559 ✨
      • J题目题解
  • 总结


write in front

✨A - A AtCoder - abc229_a✨

A题目题解

题意:2*2的矩阵中黑色块为’#',白色块为‘.’,判断矩阵中的黑色块是否连通?

分析:反向思考,不连通的情况只有两种。

#include
using namespace std;
string s1,s2;
int main()
{
	cin >> s1 >> s2;
	if((s1=="#."&&s2==".#")||(s2=="#."&&s1==".#"))
		puts("No");
	else
		puts("Yes");
	return 0;
}

✨B - B AtCoder - abc220_b✨


题意和分析可以看上一篇哦~

B题目题解

#include
#include
int main()
{
	long long k;
	scanf("%lld",&k);
	long long a,b,i=0,j=0,sum=0,count=0;
	scanf("%lld %lld",&a,&b);
	while(a>0)
	{
		sum+=a%10*pow(k,i++);
		a=a/10;
	}
	while(b>0)
	{
		count+=b%10*pow(k,j++);
		b=b/10;
	}
	long long c=count*sum;
	printf("%lld",c);
	return 0;
}

✨C - C HDU - 4811✨


题意:多组输入,每行三个数R,Y,B,分别代表红球数量,黄球数量,蓝球数量,然后每次放一个球,这个球的得分为这个球左边的球的种类+这个球右边球的种类,然后让你求把全部的球放完后的最大的总得分
分析:假设黄球的数量为0,那么其它球放入后,黄球不能够为其他球创造得分,如果黄球数量为1那么黄球放到任意1边就能够为其它颜色的球创造1的得分,如果黄球的数量为2,那么黄球放到两边,其他球放到两个黄球中间,黄球就能够为其它的球创造2分,如果黄球的数量大于2的话其实是和2的效果一样的,最多能创造2分,能想到这里然后就好办了。首先算出来所有球创造的最大得分之和(g),然后每次放1个球,价值从0开始,每次价值加1,直到达到最大可以创造的得分(g),然后算一下剩余的球的个数(h-g),剩余的球只要放就是最大得分,剩余的球创造的得分为(h-g)*g,然后加上之前的球的得分就是答案

C题目题解

#include
long long fen(long long n)
{
    if(n<=2)
    {
        return n;
    }
    return 2;
}
int main()
{
	long long r,y,b;
	while(~scanf("%lld%lld%lld",&r,&y,&b))
	{
		long long g=fen(r)+fen(y)+fen(b);
		long long h=r+y+b;
		long long sum=0,i=0;
		for(i=0;i<g;i++)
		{
			sum+=i;
		}
		if(h>g) sum+=(h-g)*g;
		printf("%lld\n",sum);
	}
	
	return 0;
}

✨D - D OpenJ_NOI - CH0105-31✨

ACM第三周---周训---题目合集._第1张图片
题意:其实就是0,1问题,0代表什么意思,1代表什么意思
分析:其实就是思维题!

D题目题解

#include
int main()
{
	int n,m,light[5000]={0};
	int i=0,j=0,cnt=0;
	scanf("%d",&n);
	scanf("%d",&m);
	for(i=2;i<=m;i++)
	{
		for(j=0;j<n;j++)
		{
			if((j+1)%i==0)
			{
				light[j]=light[j]==1 ? 0:1;
			}
		}
	}
	for(i=0;i<n;i++)
	{
		if(light[i]==0)
		{
			cnt++;
		}
	}
	for(i=0;i<n;i++)
	{
		if(light[i]==0)
		{
			cnt--;
			printf("%d",i+1);
			if(cnt!=0) printf(",");
		}
	}
	return 0;
}

✨E - E OpenJ_Bailian - 2888 ✨


题意:按顺序输出数字字符。
分析:开新数组然后冒泡排序。

E题目题解

#include
void bulle_sort(int arr[],int n)
{
	int i=0;
	for(i=0;i<n-1;i++)
	{
		int j=0;
		for(j=0;j<n-i-1;j++)
		{
			if(arr[j]>arr[j+1])
			{
				int temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
	}
}

int main()
{
	int n,i,l,t,m,a2[25];
	char a[25],a1[25],j[10];
	while(gets(a))
	{
		for(i=0;i<10;i++) j[i]=0;
		l=0;
		for(i=0;a[i]!='\0';i++)
		{
			if(a[i]>='0'&&a[i]<=57)
			{
				a1[l++]=a[i];
			}
		}
		a1[l]='\0';
		
		for(i=0;i<l;i++)
		{
			a2[i]=(int)(a1[i]-'0');
		}
		bulle_sort(a2,l);
		for(i=0;i<l;i++)
        	printf("%4c",a2[i]+'0');     
        printf("\n");
	}
	return 0;
}

✨F - F AtCoder - abc239_c✨


题意:到(0,0)这个点的长度为根号5的点
分析:枚举+暴力。

F题目题解

#include
int d[8][2] = {{-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {-2, -1}, {-1, -2}, {1, 2}, {2, 1}}; 
int main()
{
    int x1, y1, x2, y2;
    scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
    int f=0;
    for(int i=0;i<8;i++)
    {
        int x=x1+d[i][0],y=y1+d[i][1];
        if((x2-x)*(x2-x)+(y2-y)*(y2-y)==5) f=1;
    }
    if(f) puts("Yes");
    else puts("No");
    return 0;
}

✨G - G HDU - 2032✨

ACM第三周---周训---题目合集._第2张图片
题意:打印杨辉三角。
分析:根据行打印就行。

G题目题解

#include 
int main()
{
    int n,i,j;
    int a[30][30];
    while(~scanf("%d",&n))
    {
        for(i=0;i<n;i++)
        {
            a[i][0]=1;
            a[i][i]=1;
            for(j=1;j<i;j++)
            {
                a[i][j]=a[i-1][j-1]+a[i-1][j];
            }
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<=i;j++)
            {
            	if(j!=i)
                printf("%d ",a[i][j]);
                else printf("%d",a[i][j]);
            }
            printf("\n");
        }
        printf("\n");
    }
    return 0;
}

✨H - H OpenJ_Bailian - 3253✨


说实话这题博主不会hhh~博主菜菜带带呜呜呜

H题目题解

#include
 
int F(int n,int m)//n个元素,m个子集合
{
   if(n<m)
	   return 0;
   else
   {
      if(n==0||n==m||n==1||m==1)
		  return 1;
	  else
		  return F(n-1,m-1)+m*F(n-1,m);
   }
}
int main()
{
	int n;
	int cnt=0;
	while(scanf("%d",&n)!=EOF)
	{
      if(n==0)//n=0时单独讨论
	  {
	     printf("1\n");
		 continue;
	  }
	  cnt=0;
	  int i;
	  for(i=1;i<=n;i++)
		  cnt+=F(n,i);
 
	  printf("%d\n",cnt);
	}
  return 0;
}

✨I - I HDU - 1556 ✨

ACM第三周---周训---题目合集._第3张图片
分析:差分问题。

I题目题解

#include 
#include 
#include 
#include 
using namespace std;
int main(){
	int n,i,sum[100010],a,b;
	while(scanf("%d",&n)&&n!=0){
		memset(sum,0,sizeof(sum));
		for(i=1;i<=n;i++){
			scanf("%d%d",&a,&b);
			sum[a]++; 
			sum[++b]--;
		}
		for(i=1;i<=n;i++){
			sum[i]+=sum[i-1];
			if(i==1) printf("%d",sum[i]);
			else printf(" %d",sum[i]);
		}
		printf("\n"); 
	}
	return 0;
}

✨J - J HDU - 1559 ✨

ACM第三周---周训---题目合集._第4张图片
分析:求二维的差分模板题。

J题目题解

#include
#include
#include
int t,m,n,x,y,a;
long long sum[1010][1010];
long long arr[1010][1010];
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d%d%d",&n,&m,&x,&y);
		long long res=0;
		memset(sum,0,sizeof sum);
		memset(arr,0,sizeof arr);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
			{
				scanf("%lld",&arr[i][j]);	
				sum[i][j]=sum[i][j-1]+arr[i][j];
			}
		for(int i=1;i<=n;i++) 
			for(int j=1;j<=m;j++)
			{
				sum[i][j]+=sum[i-1][j]; 
				if(i>=x&&j>=y)
					res=fmax(res,sum[i][j]-sum[i][j-y]-sum[i-x][j]+sum[i-x][j-y]);
			}			
		printf("%lld\n",res);
	}
	return 0;
}

总结

1.说实话博主其实也不是全会这些题目,而是自己看了别人大佬的题解才想出来的思路和题解,这里也是分享给大家让大家学习和讨论。
2.写编程题目真的很烧time,当然更烧脑,希望每一位努力奋斗的人都能呈正反馈给到自己。
3.感恩相遇,希望给博主一个三连支持一下,蟹蟹啦~

你可能感兴趣的:(ACM周训练题目合集,算法,c语言,学习,c++,数据结构)