• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

第三届传智杯初赛

武飞扬头像
小菜锅刷题日记
帮助1

A.课程时间

        A - 课程报名 - 洛谷学新通https://www.luogu.com.cn/problem/T160507学新通

依照题意模拟即可

AC代码:

        

  1.  
    #include<bits/stdc .h>
  2.  
    using namespace std;
  3.  
    int n,v,m,a;
  4.  
    int ans;
  5.  
    int main()
  6.  
    {
  7.  
    cin>>n>>v>>m>>a;
  8.  
    int s = n/m;
  9.  
    for(int i = 1;i<=s; i)
  10.  
    {
  11.  
    ans =v*m;
  12.  
    v =a;
  13.  
    }
  14.  
    ans =v*(n%m);
  15.  
    cout<<ans<<endl;
  16.  
    return 0;
  17.  
    }
学新通

B- 期末考试成绩B - 期末考试成绩 - 洛谷学新通https://www.luogu.com.cn/problem/T160508这题比第一题还水,,按照题意模拟即可。不过我有个问题为什么59分的GPA是2.6,60分的才1.0。。 

  1.  
    #include<bits/stdc .h>
  2.  
    using namespace std;
  3.  
    int n;
  4.  
    double ans;
  5.  
    int main()
  6.  
    {
  7.  
    cin>>n;
  8.  
    if(n>=90)
  9.  
    ans = 4;
  10.  
    if(n<60)
  11.  
    n = sqrt(n)*10;
  12.  
    if(n>=60&&n<90)
  13.  
    ans = 4.0-((90-n)*0.1);
  14.  
    printf("%.1f",ans);
  15.  
    return 0;
  16.  
    }
学新通

C-志愿者

        C - 志愿者 - 洛谷学新通https://www.luogu.com.cn/problem/T160509用sort排序下就行,定义一下排序规则。手写排序的小朋友一定要用快排,希尔排序,归并排序这种高级排序算法,使用冒泡插入选择会超时的哦

用结构体分别存难度,时间,志愿者编号然后一起排序就可以了

s是时间啊,k是难度,num是志愿者编号

AC代码:

  1.  
    #include<bits/stdc .h>
  2.  
    using namespace std;
  3.  
    struct node{
  4.  
    int s,k,num;
  5.  
    }a[500005];
  6.  
    bool cmp(node a,node b)
  7.  
    {
  8.  
    if(a.s*a.k!=b.s*b.k) return a.s*a.k>b.s*b.k;
  9.  
    if(a.s!=b.s) return a.s>b.s;
  10.  
    return a.num<b.num;
  11.  
    }
  12.  
    int n;
  13.  
    int main()
  14.  
    {
  15.  
    ios::sync_with_stdio(false);
  16.  
    cin>>n;
  17.  
    for(int i = 1;i<=n; i)
  18.  
    {
  19.  
    cin>>a[i].s>>a[i].k;
  20.  
    a[i].num = i;
  21.  
    }
  22.  
    sort(a 1,a 1 n,cmp);
  23.  
    for(int i = 1;i<=n; i)
  24.  
    cout<<a[i].num<<" ";
  25.  
    return 0;
  26.  
    }
学新通

D-终端

D - 终端 - 洛谷学新通https://www.luogu.com.cn/problem/T160510本来想用map的,但是输出顺序要按输入时间输出,我用mapWA了一次就没用了,数据范围才到10e4 就按着他思路模拟就可以过了。

        一个数组存储文件名一个数组存储文件是否被删除,ls的时候看一下该点有没有被删除没被删除的输出就行了,算是暴力解法了

AC代码:

  1.  
    #include<bits/stdc .h>
  2.  
    using namespace std;
  3.  
    string first[10005];//存储文件名
  4.  
    int vis[10005];//存储是否被删除
  5.  
    int cnt;
  6.  
    string temp,fname;
  7.  
    int n;
  8.  
    int main()
  9.  
    {
  10.  
    cin>>n;
  11.  
    while(n--)
  12.  
    {
  13.  
    cin>>temp;
  14.  
    if(temp=="ls")
  15.  
    {
  16.  
    for(int i = 1;i<=cnt; i)
  17.  
    if(vis[i])//如果没被删除就输出
  18.  
    cout<<first[i]<<endl;
  19.  
    continue;
  20.  
    }
  21.  
    cin>>fname;
  22.  
    if(temp=="touch")
  23.  
    {
  24.  
    bool flag = false;
  25.  
    for(int i = 1;i<=cnt; i)
  26.  
    if(first[i]==fname){//创建时如果该文件名存在直接跳过
  27.  
    flag = true;
  28.  
    break;
  29.  
    }
  30.  
    if(flag) continue;
  31.  
    first[ cnt] = fname;//新建文件
  32.  
    vis[cnt] = 1;//标记文件未删除
  33.  
    }
  34.  
    if(temp=="rm")//删除操作找到文件名直接标记为0就行
  35.  
    for(int i = 1;i<=cnt; i)
  36.  
    if(first[i]==fname)
  37.  
    {
  38.  
    vis[i] = 0;
  39.  
    break;
  40.  
    }
  41.  
    if(temp=="rename")//更改找到文件名直接更改就行了
  42.  
    {
  43.  
    string fname2;
  44.  
    cin>>fname2;
  45.  
    for(int i = 1;i<=cnt; i)
  46.  
    if(first[i]==fname)
  47.  
    {
  48.  
    first[i] = fname2;
  49.  
    break;
  50.  
    }
  51.  
    }
  52.  
    }
  53.  
    return 0;
  54.  
    }
学新通

E-运气

        E - 运气 - 洛谷学新通https://www.luogu.com.cn/problem/T160513       最基础的搜索,直接暴力枚举每一种情况就行了。时间复杂度是O(6^n)但因为n很小不会超时的

AC代码:

  1.  
    #include<bits/stdc .h>
  2.  
    #define ll long long
  3.  
    using namespace std;
  4.  
    const ll N = 10e9 7;
  5.  
    ll ans;
  6.  
    int n,k;
  7.  
    void dfs(ll now,int s)//now表示目前表示的数,s表示还有几次没甩
  8.  
    {
  9.  
    if(s==0)
  10.  
    {
  11.  
    if(now%k==0) ans ;//如果结果是k的倍数,令答案数量 1即可
  12.  
    return;
  13.  
    }
  14.  
    for(int i = 1;i<=6; i)
  15.  
    dfs((ll)now*10 i,s-1);
  16.  
    }
  17.  
     
  18.  
    int main()
  19.  
    {
  20.  
    cin>>n>>k;
  21.  
    dfs(0,n);
  22.  
    printf("%lld",ans%N);
  23.  
    return 0;
  24.  
    }
学新通

F-游戏:

       F - 游戏 - 洛谷学新通https://www.luogu.com.cn/problem/T160511唯一没写出来的题,一开始考虑dp或者贪心,但是既不满足无后效性也不满足局部最优能得到全局最优,最后放弃了写这题。。后来发现可能需要建图求联通块啥的,不过没写出来就是没写出来

G-森林:

        G - 森林 - 洛谷学新通https://www.luogu.com.cn/problem/T160512这题还行,不过我一遍AC了,(小骄傲)

具体思路代码看我博客:

总结

        除了a组比b组多出来的两题,其他题都相当水,,F题和G题勉勉强强够得到NOIP吧,我前五题一小时以内就A完了,G题也就写了十几二十分钟这样。F题我看了十几分钟没想出来解法就放弃了。算是第四届初赛前的一个小自测吧

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfeabj
系列文章
更多 icon
同类精品
更多 icon
继续加载