初赛心得
2022/4/9,本人于大一下初次参加面向各大高校的编程竞赛,在参赛选拔时,对算法的了解仅为皮毛,学习acwing算法基础课,仅能掌握快速幂、前缀和等初级算法。经过大约一个月的学习,初步了解二分、前缀和、位运算、STL库(观看数组实现视频,无法独立完成)、暴搜、简单并查集、Kruskal(克鲁斯卡尔)求最短路、快速幂、简单博弈论(Nim游戏),知道DP(仅观看推导视频,跟抄代码,从未自己实现),会做简单贪心,并能够做出简单推导,学习了微扰法证明国王游戏(可在算法竞赛进阶指南中查阅)。
A
简单进制转换(开始的时候还差点算错,后来看到X进制一题,觉得不太对劲,回来才更正了)
B
目前来说题目还有争议(做的时候没想那么多,直接在纸上推)
C
做的时候没想那么多,也不太看数据,最多知道a b要用long long,对于时间复杂度的关注是我在比赛后的这两三天只内,听学长讲,xyc讲才开始的。
#include<iostream>
using namespace std;
//对于100%的样例,a,b,n为long long
#define int long long
int n;
int a,b;
int ans;
signed main()
{
cin>>a>>b>>n;
int t=n/(a*5+b*2);//算出每周做题,总题数/周,下取整
int T=n%(a*5+b*2);//计算剩余题目
int cnt=0;//统计天数
for(int i=0;i<7;i++)
{//i不会超过7,即如果超过7天,则会被算入t
if(T<=0)break;//如果T减到零以后结束循环,可能半天做完,也得算一天
if(i==5&&i==6)T-=b;
else T-=a;
cnt=i+1;
}
cout<<t*7+cnt;//t是以周为单位的
return 0;
}
c题,对于全部数据n要超1e8的,如果按天计算,必超时。
D
#include<iostream>
using namespace std;
int n;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cout<<max(i*2,(n-i-1)*2)<<endl;
}
return 0;
}
、