A.课程时间
A - 课程报名 - 洛谷https://www.luogu.com.cn/problem/T160507
依照题意模拟即可
AC代码:
#include
using namespace std;
int n,v,m,a;
int ans;
int main()
{
cin>>n>>v>>m>>a;
int s = n/m;
for(int i = 1;i<=s;++i)
{
ans+=v*m;
v+=a;
}
ans+=v*(n%m);
cout<
B- 期末考试成绩B - 期末考试成绩 - 洛谷https://www.luogu.com.cn/problem/T160508这题比第一题还水,,按照题意模拟即可。不过我有个问题为什么59分的GPA是2.6,60分的才1.0。。
#include
using namespace std;
int n;
double ans;
int main()
{
cin>>n;
if(n>=90)
ans = 4;
if(n<60)
n = sqrt(n)*10;
if(n>=60&&n<90)
ans = 4.0-((90-n)*0.1);
printf("%.1f",ans);
return 0;
}
C-志愿者
C - 志愿者 - 洛谷https://www.luogu.com.cn/problem/T160509用sort排序下就行,定义一下排序规则。手写排序的小朋友一定要用快排,希尔排序,归并排序这种高级排序算法,使用冒泡插入选择会超时的哦
用结构体分别存难度,时间,志愿者编号然后一起排序就可以了
s是时间啊,k是难度,num是志愿者编号
AC代码:
#include
using namespace std;
struct node{
int s,k,num;
}a[500005];
bool cmp(node a,node b)
{
if(a.s*a.k!=b.s*b.k) return a.s*a.k>b.s*b.k;
if(a.s!=b.s) return a.s>b.s;
return a.num>n;
for(int i = 1;i<=n;++i)
{
cin>>a[i].s>>a[i].k;
a[i].num = i;
}
sort(a+1,a+1+n,cmp);
for(int i = 1;i<=n;++i)
cout<
D-终端
D - 终端 - 洛谷https://www.luogu.com.cn/problem/T160510本来想用map的,但是输出顺序要按输入时间输出,我用mapWA了一次就没用了,数据范围才到10e4 就按着他思路模拟就可以过了。
一个数组存储文件名一个数组存储文件是否被删除,ls的时候看一下该点有没有被删除没被删除的输出就行了,算是暴力解法了
AC代码:
#include
using namespace std;
string first[10005];//存储文件名
int vis[10005];//存储是否被删除
int cnt;
string temp,fname;
int n;
int main()
{
cin>>n;
while(n--)
{
cin>>temp;
if(temp=="ls")
{
for(int i = 1;i<=cnt;++i)
if(vis[i])//如果没被删除就输出
cout<>fname;
if(temp=="touch")
{
bool flag = false;
for(int i = 1;i<=cnt;++i)
if(first[i]==fname){//创建时如果该文件名存在直接跳过
flag = true;
break;
}
if(flag) continue;
first[++cnt] = fname;//新建文件
vis[cnt] = 1;//标记文件未删除
}
if(temp=="rm")//删除操作找到文件名直接标记为0就行
for(int i = 1;i<=cnt;++i)
if(first[i]==fname)
{
vis[i] = 0;
break;
}
if(temp=="rename")//更改找到文件名直接更改就行了
{
string fname2;
cin>>fname2;
for(int i = 1;i<=cnt;++i)
if(first[i]==fname)
{
first[i] = fname2;
break;
}
}
}
return 0;
}
E-运气
E - 运气 - 洛谷https://www.luogu.com.cn/problem/T160513 最基础的搜索,直接暴力枚举每一种情况就行了。时间复杂度是O(6^n)但因为n很小不会超时的
AC代码:
#include
#define ll long long
using namespace std;
const ll N = 10e9+7;
ll ans;
int n,k;
void dfs(ll now,int s)//now表示目前表示的数,s表示还有几次没甩
{
if(s==0)
{
if(now%k==0) ans++;//如果结果是k的倍数,令答案数量+1即可
return;
}
for(int i = 1;i<=6;++i)
dfs((ll)now*10+i,s-1);
}
int main()
{
cin>>n>>k;
dfs(0,n);
printf("%lld",ans%N);
return 0;
}
F-游戏:
F - 游戏 - 洛谷https://www.luogu.com.cn/problem/T160511唯一没写出来的题,一开始考虑dp或者贪心,但是既不满足无后效性也不满足局部最优能得到全局最优,最后放弃了写这题。。后来发现可能需要建图求联通块啥的,不过没写出来就是没写出来
G-森林:
G - 森林 - 洛谷https://www.luogu.com.cn/problem/T160512这题还行,不过我一遍AC了,(小骄傲)
具体思路代码看我博客:
第三届传智杯初赛A组G题 - 森林_zhu_yin233的博客-CSDN博客原题链接:G - 森林 - 洛谷https://www.luogu.com.cn/problem/T160512题目背景YYH Land(Yoauld, Youthful & Happy Land)是位于炽蓝仙野的一片神奇的国度,那里的人们过着无拘无束的的快乐生活。题目描述清蒸鱼是一个尽职尽责的 YYH Land 护林者。他负责每天维护 YYH Land 的森林。在最开始的时候,YYH Land 只有一棵具有n个节点的树,每个节点有一个灵力值v。由于 Y...https://blog.csdn.net/zhu_yin233/article/details/121659778?spm=1001.2014.3001.5502
除了a组比b组多出来的两题,其他题都相当水,,F题和G题勉勉强强够得到NOIP吧,我前五题一小时以内就A完了,G题也就写了十几二十分钟这样。F题我看了十几分钟没想出来解法就放弃了。算是第四届初赛前的一个小自测吧