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

简介: ACM第三周---周训---题目合集.

>🚀write in front🚀  

>📝个人主页:[认真写博客的夏目浅石.CSDN](https://blog.csdn.net/congfen214?type=blog)

>🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

>📣系列专栏:[ACM周训练题目合集.CSDN](https://blog.csdn.net/congfen214/category_12101464.html?spm=1001.2014.3001.5482)

💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊

✉️为什么我们不知疲倦,因为我们都在做自己所热爱的事 ♐


@[TOC](文章目录)


---


# 🚀write in front🚀  


## ✨A - A AtCoder - abc229_a✨

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/9e1801a3e4174123a914f458e431251d.png)

### 💬A题目题解💬

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


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

```cpp

#include<bits/stdc++.h>

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✨


![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/21276f2f323f4066a832a36118db012a.png)

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

### 💡B题目题解💡


```c

#include<stdio.h>

#include<math.h>

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✨

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/547e359fbbe24fc8910cea5555fde3b4.png)

题意:多组输入,每行三个数R,Y,B,分别代表红球数量,黄球数量,蓝球数量,然后每次放一个球,这个球的得分为这个球左边的球的种类+这个球右边球的种类,然后让你求把全部的球放完后的最大的总得分

分析:假设黄球的数量为0,那么其它球放入后,黄球不能够为其他球创造得分,如果黄球数量为1那么黄球放到任意1边就能够为其它颜色的球创造1的得分,如果黄球的数量为2,那么黄球放到两边,其他球放到两个黄球中间,黄球就能够为其它的球创造2分,如果黄球的数量大于2的话其实是和2的效果一样的,最多能创造2分,能想到这里然后就好办了。首先算出来所有球创造的最大得分之和(g),然后每次放1个球,价值从0开始,每次价值加1,直到达到最大可以创造的得分(g),然后算一下剩余的球的个数(h-g),剩余的球只要放就是最大得分,剩余的球创造的得分为(h-g)*g,然后加上之前的球的得分就是答案

### 🎈C题目题解🎈


```c

#include<stdio.h>

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✨

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/044c738af6c24b018092658b3811d964.png)

题意:其实就是0,1问题,0代表什么意思,1代表什么意思

分析:其实就是思维题!

### 💬D题目题解💬


```c

#include<stdio.h>

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 ✨

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/ce377367c44143e88c4d7445e2d29b64.png)

题意:按顺序输出数字字符。

分析:开新数组然后冒泡排序。

### 💡E题目题解💡


```c

#include<stdio.h>

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✨

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/db9c4385ff054b20b2ff9a70c0e7931c.png)

题意:到(0,0)这个点的长度为根号5的点

分析:枚举+暴力。


### 🎈F题目题解🎈


```c

#include<stdio.h>

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✨

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/21241f62123d4bf09f07803120156a22.png)

题意:打印杨辉三角。

分析:根据行打印就行。

### 💬G题目题解💬


```c

#include <stdio.h>

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✨

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/c7db046f719e489bb32a4d7c66b81f72.png)

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

### 💡H题目题解💡


```c

#include<stdio.h>

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 ✨

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/f2341ad3c25b4cca81824f4f27af2e50.png)

分析:差分问题。

### 🎈I题目题解🎈


```cpp

#include <iostream>

#include <cstdio>

#include <cmath>

#include <cstring>

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 ✨

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/8db1be1b7db14c10b920618e09a9d6c9.png)

分析:求二维的差分模板题。

### 💬J题目题解💬


```c

#include<stdio.h>

#include<string.h>

#include<math.h>

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.感恩相遇,希望给博主一个三连支持一下,蟹蟹啦~

相关文章
|
9月前
|
Java
ACM刷题之路(二十四)HDU 2844 多重背包转换 Coins
ACM刷题之路(二十四)HDU 2844 多重背包转换 Coins
|
9月前
|
知识图谱
ACM刷题之路(二十三) HDU 1114 完全背包 Piggy-Bank
ACM刷题之路(二十三) HDU 1114 完全背包 Piggy-Bank
|
9月前
ACM刷题之路(十九)二分+尺取 2019暑期集训 HDU6231 K-th Number
ACM刷题之路(十九)二分+尺取 2019暑期集训 HDU6231 K-th Number
|
存储 C++
CCF小白刷题之路---202009-3 点亮数字人生(C/C++ 100分)
CCF小白刷题之路---202009-3 点亮数字人生(C/C++ 100分)
185 0
CCF小白刷题之路---202009-3 点亮数字人生(C/C++ 100分)
每日一题---蓝桥杯基础练习“字母图形”
每日一题---蓝桥杯基础练习“字母图形”
|
人工智能 算法
AcWing算法学习第三节---高精度问题.
AcWing算法学习第三节---高精度问题.

热门文章

最新文章