1:由于本人第一次招新只敲了2道题,所以不能作为第一批进入ACM基地的新生,
昨晚基地进行了第二次招新的第二次测试,虽然敲了4题(比上次好一点),但依旧没有拿到好的名次(差点垫底了,链接就不发了)(但进基地综合测频因该是够了),下面就来说说这次比赛打出来和没打出来的题目,同时也作为一次难得的经历(第一次写文章);
附上第一种数组的代码:
#include<stdio.h>
int main()
{
int n,m,x;
double a[105]={-1},score,ave,sum=0;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d %lf",&x,&score);//当时紧张的%lf打成了%d,居然还敢提交!!
a[x]=score;
sum+=score;
}
ave=1.0*sum/n;
if(a[m]<60)
{
a[m]=60;
}
for(int j=1;j<=n;j++)
{
if(j!=m&&a[j]>=ave&&a[j]>=2) //大于2分才要操作
{
a[j]=a[j]-2;
}
if(j!=m&&a[j]>=ave&&a[j]<2)
{
a[j]=a[j];
}
if(j!=m&&a[j]<ave)
{
a[j]=a[j];
}
}
for(int k=1;k<=n;k++)
{
if(a[k]!=-1) //不是-1说明成绩已经被修改过
{
printf("%.0lf ",a[k]);
}
}
}
一个好兄弟用结构体写了(我一开始也用的结构体,到后面i被我定义乱了,直接删掉换思路):
#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<cstring>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const int N = 100010;
#define pi 3.14159265358979323846
const double m = sqrt(2);
struct s
{
int id,score;
}stu[N];
bool cmp(s a,s b)
{
return a.id<b.id;
}
int main()
{
int n,m,sum=0;
double av;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>stu[i].id>>stu[i].score;
sum+=stu[i].score;
}
av=(double)sum/(double)n;
for(int i=0;i<n;i++)
{
if(stu[i].id==m&&stu[i].score<=60)
{
stu[i].score=60;
}
if(stu[i].score>=av&&stu[i].id!=m)
{
stu[i].score-=2;
}
}
sort(stu,stu+n,cmp);
for(int i=0;i<n;i++)
{
cout<<stu[i].score<<' ';
}
return 0;
}
简单的水题,就两种情况要么1要么0.。
#include<stdio.h>
int main()
{
int m,n;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
if(n%m!=0)
{
printf("1\n");
}
else if(n%m==0)
{
printf("0\n");
}
}
return 0;
}
最后一个水题,但我比赛脑子抽了、、
看到题解之后直接崩溃,没想到还能这么循环(学到了,学到了)
#include <stdio.h>
int main()
{
int n, i, a, j=0;
int num[100000]={0};
scanf("%d", &n);
a=n;
while(a) //循环从踢出人后再次开始
{
int m=0;
for(i=1;i<=n;i++)
{
if(num[i]==0)
{
j++;
m++;
if(j%7==0) //循环到7开始踢人
{
num[i]=1;
}
}
}
if(m==1)
{
break;
}
}
for(i=1;i<=n;i++)
{
if(num[i]==0)
{
printf("%d", i);
break;
}
}
return 0;
}
好像是一道经典的题;
下面这题其实也是水题啊,(我已经不想感叹了),当时没想到会有一个连第一个箱子都没装满的情况(max=1),我尽然直接默认装满了一个箱子,思维定势了。
水题直接上代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,j,max=1; //第一个箱子没装满的情况,一定注意
int s[1010],x[1010],cnt[1010]; //cnt数组是记录东西放在哪个箱子
for(int i=0;i<1010;i++)
{
x[i]=100;
}
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s[i];
}
//两次for寻找放东西的第一个合适位置
for(int i=1;i<=n;i++)
{
for(j=1;j<=n;)
{
if(s[i]<=x[j])
{
x[j]=x[j]-s[i]; //箱子放得下的话就把容量减去货物大小
cnt[i]=j; //顺便记录物品放置的箱子编号
}
else if(s[i]>x[j])
{
while(s[i]>x[j])
{
j++;
if(j>max)
{
max=j; //记录最大的箱子编号
}
}
x[j]=x[j]-s[i];
cnt[i]=j;
}
break;
}
}
for(int i=1;i<=n;i++)
{
printf("%d %d\n",s[i],cnt[i]);
}
cout<<max;
}
怎么说呢,虽然只是一次基地招新选拔测试,但也暴露出了很多不足,比如被题面给吓住(箱子那题比赛时我大概看了一下以为是贪心算法,当时还没学那么多,就直接跳过了),看到提交榜单有好多人已经AC了这题当时就吓蒙了,觉得他们都学这么快根本没法跟他们比;
以后再也不会犯这种错误,
下面是2022年寒假的一些规划,希望ACMer们能互相监督共同达成目标,在蓝桥杯和天梯赛取得好名次:
1.好好复习上学期所学的知识,把之前参加的比赛题目在复习一遍,错题集里的题目再自己敲一遍。
2.完整成体系的把AcWing上的算法基础课学一遍,争取每天学完一些知识后能找些题目练练手,第二天再把算法模板敲一遍加深印象。
3.如果时间允许,还想再把下学期的课程内容预习预习,毕竟下学期开学就是集训(基地给我们请2周的假让我们集训),要落下好多的课程要去补。
4.每天记点单词,这个任务希望我(必须)能坚持下去。