ACM第一周---周训---题目合集.
🚀write in front🚀
📝个人主页:认真写博客的夏目浅石.CSDN
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:ACM周训练题目合集.CSDN
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
✉️为什么我们不知疲倦,因为我们都在做自己所热爱的事 ♐
文章目录
- 前言
- A - How many days?
- B - Pangram
- C - Cifera
- D - Covered Points Count
- E - Ksusha and Array
- F - 最大连续子序列
- G - Wow! Such Doge!
- H - Counting Rectangles
- I - 素数判定
- J - 最大子矩阵
- 总结
前言
本周进行了一些特别基础的练习来巩固知识,写成博客方便我去复习使用。
A - How many days?
思路:语法题,根据题目要求,按部就班去写就可以AC
#include<stdio.h>int main()
{int m,k;while(~scanf("%d %d",&m,&k)){if(m==0&&k==0){break;}int cnt=0,day=0;while(m){cnt++;m--;if(cnt==k){m++;cnt=0;}day++;}printf("%d\n",day);}return 0;
}
B - Pangram
思路:桶排序思想
#include<iostream>using namespace std;int book[27];int main()
{int n;cin>>n;char ch;for(int i=0;i<n;++i){cin>>ch;if(ch>='A'&&ch<='Z'){ch=ch+'a'-'A';}book[ch-97]++;}int flag=0;for(int i=0;i<26;++i){if(book[i]==0){flag=1;break;}}if(flag==1) puts("NO");else puts("YES");return 0;
}
C - Cifera
思路:判断k是否是l的次幂次关系,语法问题
#include<stdio.h>typedef long long ll;int main()
{ll k,l,tmp;scanf("%lld %lld",&k,&l);tmp=k;int cnt=0;while(tmp<l){tmp*=k;cnt++;}if(tmp==l) {puts("YES");printf("%d\n",cnt);}else puts("NO");return 0;
}
D - Covered Points Count
等我研究一下,emmm我不会我是fw
E - Ksusha and Array
思路:qsort进行排序,然后拿最小的那个去整除所有数字看是否可以整除
#include<stdio.h>
#include<stdlib.h>
int cmp1(const void* e1, const void* e2)
{return *((int*)e1) - *((int*)e2);
}
int flag=0;
int main()
{int n;int arr[100010];scanf("%d",&n);for(int i=0;i<n;++i){scanf("%d",&arr[i]);}qsort(arr,n,sizeof(arr[0]),cmp1);int flag=1;for(int i=0;i<n;++i){if(arr[i]%arr[0]){flag=0;break;}}if(flag) {printf("%d\n",arr[0]);}else {printf("-1\n");}return 0;
}
F - 最大连续子序列
#include "iostream"
#include "stdio.h"
#include "math.h"
#include "algorithm"
#include "string"
using namespace std;
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:bint n;
int a[10010];int main()
{while(scanf("%d",&n)!=EOF&&n){int i,j=0,tmp=0,sum=0,maxx=-1,s=0,e=n-1;for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++){tmp+=a[i];if(tmp>maxx){s=j;e=i;maxx=tmp;}else if(tmp<0){j=i+1;tmp=0;}}if(maxx<0)maxx=0;printf("%d %d %d\n",maxx,a[s],a[e]);}
}
G - Wow! Such Doge!
#include<iostream>
#include<cstdio>
#include <string.h>
using namespace std;
int main()
{char arr[1001];int len,i,cnt=0;while(~scanf("%s",arr)){len=strlen(arr);for(i=0;i<len;i++){if(arr[i]=='d'||arr[i]=='D'){if(arr[i+1]=='o'||arr[i+1]=='O'){if(arr[i+2]=='g'||arr[i+2]=='G'){if(arr[i+3]=='e'||arr[i+3]=='E'){cnt++;i+=3;}}}}}}cout<< cnt <<endl;return 0;
}
H - Counting Rectangles
不会
I - 素数判定
#include<stdio.h>
int main()
{int x,y,i,j;scanf("%d %d",&x,&y);while(x!=0||y!=0){int flag=0;for(i=x;i<=y;i++){int sum=i*i+i+41;for(j=2;j<sum;j++){if(sum%j==0){flag=1;break;}else continue;}}if(flag==0){printf("OK\n");}else{printf("Sorry\n");}scanf("%d %d",&x,&y); }return 0;
}
J - 最大子矩阵
思路:二维前缀和公式的使用
#include<stdio.h>
#include<string.h>
#include<math.h>int arr[1010][1010];int main()
{int t,m,n,x,y;scanf("%d",&t);while(t--){memset(arr,0,sizeof(arr));int ans=0;scanf("%d %d %d %d",&n,&m,&x,&y);for(int i=1;i<=n;++i){for(int j=1;j<=m;++j){scanf("%d",&arr[i][j]);arr[i][j]+=arr[i-1][j]+arr[i][j-1]-arr[i-1][j-1];if(i>=x&&j>=y){ans=fmax(arr[i][j]-arr[i-x][j]-arr[i][j-y]+arr[i-x][j-y],ans);}}}printf("%d\n",ans);}return 0;
}
总结
多刷,多学,多做。
我是夏目浅石,希望和你一起学习进步,刷题无数!!!希望各位大佬
能一键三连支持一下博主
,hhhh~我们下期见喽
如果无聊的话,就来逛逛我的博客栈吧stack-frame.cn
✨原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力!\textcolor{9c81c1}{点赞,你的认可是我创作的动力!}点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!\textcolor{ed7976}{收藏,你的青睐是我努力的方向!}收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!\textcolor{98c091}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!