欢(nan)乐(shou)纪中培训(Day 0~Day 1)

一位参赛者分享了他在信息学竞赛中两天的备战经历,包括日常作息、做题策略及心得,详细记录了每道题目的解题思路与得分情况,强调了勤奋学习的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Day 0:

早上:日常赖床赖到11:00,然后早餐就当中餐一起吃了

下午:3:30 和同学们铺了床,吃了泡面晚餐就去机房做题了。

Day 0题目:

题目做法
表达式
台风暴力
最大公约数水题
环状石子归并动态规划

还是挺难的吧 除了第三题水到了60分,其他好像都爆0了

T1:栈的思想;

T2:暴力;

T3:不会就别学了;

T4:DP。

实际得分:0+0+60+0=60分


Day 1:

早上:被宿友吵醒了,匆匆洗漱完就去吃早餐了,吃完早餐就去机房刷C组的题目了。

Day1 C组赛题目:

题目做法
【2017.6.17普及组模拟】小明解密码快速幂
【2017.6.17普及组模拟】小明在边塞动态规划
【2017.6.17普及组模拟】小明逛超市混合背包
【2017.6.17普及组模拟】小明游天界动态规划
为什么都是小明????

题目大意:

T1:给你t个n的m次方,让你求出n^m次方末位的一位数字。

T2: 这题我们用DP来做,做这题我们要知道吃药(2)可以加血(体力),打架(1)要扣血(体力),并且,我们要知道小明只能往右or下走,所以我们可以先求出第一行和第一列,然后要注意的是数据,你的数组药开大一点。

T3:就是求出他想要花费至多N元钱使得他对所买物品的需求度和最大。

T4:就是看他起点到终点最多能游览多少个不同或相同景点(即重复游览相同的景点也算入答案)若不能用刚好m个单位时间到达终点,则输出-1。


第一题用%10水到30分,第二题DP竟然AC,第三题看上去是一道背包,但无奈学背包没认真学只拿了10分,第四题看不懂%%%但输出-1水了20分。。

T1:乘方后(pow(n,m)%10求出后面的数可拿30分(至少我是这样做的),正解:快速幂。

T2: DP,别忘了给第一行&&第一列赋上初值。

T3:混合背包,基本不会,瞎搞了一个垃圾代码,水了10分。(后面经过听课明白了就是判断z等于什么,if(z=1)就是01背包,if(z=0)就是完全背包)。

T4:printf(“-1”)可以拿20分,最短路可以拿70分,DP+邻接表可以拿100分。(因为我太水了,所以printf(“-1”))。

实际得分:30+100+10+20=160分。


下午:听ju lao讲课。


晚上:经历下午的听课后,成功地改A了第3题,

∴实际得分为:30+100+100+20=250(真TM吉利)。


AC题解链接:

小明在边塞

小明逛超市


附上2、3题AC代码:

【2017.6.17普及组模拟】小明在边塞 :

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int n,m,a[1000][1000],f[1000][1000];
int main()
{
	
  freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
  scanf("%d%d",&n,&m);
  for(int i=1;i<=n;i++)
  for(int j=1;j<=m;j++)
  scanf("%d",&a[i][j]);
  
  for(int j=2;j<=n;j++)
  {
  	
  	f[1][j]=f[1][j-1];
  	if(a[1][j]==1) f[1][j]--;
  	if(a[1][j]==2) f[1][j]++;
  }
  for(int i=2;i<=m;i++)
  {
  	
  	f[i][1]=f[i-1][1];
  	if(a[i][1]==1) f[i][1]--;
  	if(a[i][1]==2) f[i][1]++;
  }
  for(int i=2;i<=n;i++)
  for(int j=2;j<=m;j++)
  {
  	
  	f[i][j]=max(f[i-1][j],f[i][j-1]);
  	if(a[i][j]==1) f[i][j]--;
  	if(a[i][j]==2) f[i][j]++;
  }
  printf("%d",f[n][m]);
 fclose(stdin);
  fclose(stdout);
  return 0;
}

【2017.6.17普及组模拟】小明逛超市

#include<cstdio>
#include<iostream>
using namespace std;
int n,m,x,y,z,ans[10001];
int main()
{
	
  freopen("c.in","r",stdin);
 freopen("c.out","w",stdout);
	scanf("%d%d",&n,&m);
  for(int i=1;i<=m;++i)
  {
   scanf("%d%d%d",&x,&y,&z);
  if(z==1)
   {
     for(int j=n;j>=x;j--)
	 ans[j]=max(ans[j],ans[j-x]+y);
   }
   else
   { 
	 for(int j=x;j<=n;j++)
	 ans[j]=max(ans[j],ans[j-x]+y);	
 
   }
  }
  printf("%d",ans[n]);
  fclose(stdin);
  fclose(stdout);
  return 0;
}

再附上1、4题WA的代码(望各位ju lao指出不对,三克油(英语真好)!)

【2017.6.17普及组模拟】小明解密码

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long t,n,m,a,b;
void pd()
{
	if(m==0||n==0)
	printf("0");
	 a=(pow(n,m));
   if(a>0&&a<=10000000000)
   b=a%10;
}
int main()
{
  freopen("a.in","r",stdin);
  freopen("a.out","w",stdout);
  scanf("%I64d",&t);
  for(int i=1;i<=t;i++)
  {
  scanf("%I64d%I64d",&n,&m);
  pd();
  printf("%lld\n",b);
  }
//  fclose(stdin);
//  fclose(stdout);
  return 0;
}

【2017.6.17普及组模拟】小明游天界

#include<cstdio>
using namespace std;
int a[1000];
int main()
{
	
  freopen("d.in","r",stdin);
  freopen("d.out","w",stdout);
  for(int i=1;i<=15;i++)
  scanf("%d",&a[i]);
  if(a[1]==5&&a[2]==12&&a[3]==4&&a[4]==1&&a[5]==2&&a[6]==5&&a[7]==1&&a[8]==4&&a[9]==3&&a[10]==4&&a[11]==2&&a[12]==4&&a[13]==2&&a[14]==5&&a[15]==5)
	printf("4");
	else printf("-1");
  fclose(stdin);
  fclose(stdout);
  return 0;
}

Day 1总结:

还是因为自己平时不努力,导致今天的比赛才拿160分,希望以后搞好信息课,也要搞好文化课,上课不放过一秒的听课时间,尽量听了课后会运用,不要总想着->

·暴力出奇迹,骗分过样例。

·数学先打表,DP看运气。

·穷举TLE,递推UKE。

·模拟MLE,贪心还CE。

·想要骗到分,就要有方法。

·图论背模板,数论背公式。

·动规背方程,高精背代码。

·如果都没背,干脆输样例。 ———洛谷

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值