因为是第一场周赛题目难度并没有拉得高;
下次必须狠狠地加难度
A.Hello World
#include<stdio.h>
int main(){
puts("I Love nowcoder");//直接复制粘贴输出就好了
}
B.简单电梯房
#include<stdio.h>
int main(){
int x,y;
scanf("%d%d",&x,&y);
if(x>y){
if(x-y>3)puts("NO");//判断一下y是否比x低三层
else puts("YES");
}
else {
if(y-x>2)puts("NO");//判断一下y是否比x高二层
else puts("YES");
}
}
C.刻度尺
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
printf("%d",(n%5>=3)?n-(n%5)+5:n-(n%5));
//比较一下该点的上一个刻度和下一个刻度,哪个近就输出哪个
}
D.恐怖袭击
#include<stdio.h>
void solve(){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
puts(b-c<=a?"YES":"NO");//判断一下b减去a是否小于等于c
}
int main(){
int t;
scanf("%d",&t);
while(t--)solve();//注意有多样例
}
E.x?
#include<stdio.h>
using namespace std;//本题就是考察n是否能通过只除以2和3除尽
int main(){
int n;
scanf("%d",&n);
while(n%3==0)n/=3;//除以3到不能除为止
while(n%2==0)n/=2;//除以2到不能除为止
puts((n==1?"Yes":"No"));//如果等于1就是能除尽
}
F.冒泡排序?
#include<stdio.h>
int n,a[10000];
int main() {
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
for(int i=0;i<n;i++){//写个冒泡排序就行了
for(int j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
int now=a[j];
a[j]=a[j+1];
a[j+1]=now;
}
}
}
for(int i=0;i<n;i++)printf("%d ",a[i]);
return 0;
}
G.小陆学长的组合数学
本题考察杨辉三角形的运用(其实题面已经说明白了)
#include<stdio.h>
typedef long long ll;
ll a[1100][1100];
const int mod=1e9+7;
int main(){
int n;
scanf("%d",&n);
for (int i=1;i<=1000;i++){//先预处理出杨辉三角形
a[i][i] = a[i][0] = 1;
for (int j=1;j<i;j++)a[i][j]=(a[i-1][j-1]+a[i-1][j])%mod;
//注意数据量很大,要取模
}
for (int t=1;t<=n;t++){
int i,j;
scanf("%d%d",&i,&j);
printf("%ld\n",a[i][j]);//直接回答就行了
}
}
H.小陆学长的硬币
题面也提示了是一个贪心,
题目提示了只有一个B和一些A,那么整个字符串会被B分成两半。
选择子串AB,将其变为BC,
选择子串BA,将其变为CB,
将题目抽象化就变成了B可以吃掉两边的其中一个A,并挪到A的位置上,在原来的B的位置吐出一个C;
并且回去的路会被吐出的C拦住,所以当选择了一个方向后就不能后悔了;
所以正确解法应该是输出左右两边的A数量较多的那一边的A的个数;
#include<stdio.h>
char s[500005];
int main(){
scanf("%s",s);
int l=0,r=0;
int flag=0;
for(int i=0;s[i]!=NULL;i++){
if(s[i]=='B')flag=1;
if(flag==0&&s[i]=='A')l++;
if(flag==1&&s[i]=='A')r++;
}
printf("%d",(l>=r?l:r));
}
I.压轴题(大概?)
本题考察前缀和的运用;
没啥别的,学过就会写;
大家尽量在下一次周赛前学一下差分和前缀和
#include<stdio.h>
typedef long long ll;
int a[100010];
ll pre[100010];
int main(){
int n,m;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=n;i++)pre[i]=pre[i-1]+a[i];
scanf("%d",&m);
for(int i=1;i<=m;i++){
int l,r;
scanf("%d%d",&l,&r);
printf("%lld\n",pre[r]-pre[l-1]);
}
return 0;
}

Comments NOTHING