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);
}
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。
·想要骗到分,就要有方法。
·图论背模板,数论背公式。
·动规背方程,高精背代码。
·如果都没背,干脆输样例。 ———洛谷