• 第七周周赛题解


    比赛链接——点我

    F——奇偶交换,G——聚餐,J——LSZ的签到题 题解链接

    点我

     
     
     
    D——奥里给!,E——yzj学长的即兴发挥,I——秤取物体重量 题解链接
     

    B题——0和1:

    点我

    A题——So easy:

     题目数据非常小,所以这道题是不卡时间的。就直接dfs递归就完了

    可能有人会问怎么dfs,那就枚举每一个宠物的技能。如果概率大于题目要求的k的话就统计一下最小代价就完了

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 #include<iostream>
     5 using namespace std;
     6 const int maxn=55;
     7 const int INF=0x3f3f3f3f;
     8 int v[maxn],k,n,w[maxn],p[maxn],minn=INF;
     9 void dfs(int x,int y)
    10 {
    11     if(x>=k)
    12     {
    13         minn=min(minn,y);
    14         return;
    15     }
    16     for(int i=1; i<=n; ++i)
    17     {
    18         if(v[i])
    19         {
    20             v[i]--;
    21             dfs(x+w[i],y+p[i]);
    22             v[i]++;
    23         }
    24     }
    25 }
    26 int main()
    27 {
    28     scanf("%d%d",&n,&k);
    29     for(int i=1; i<=n; ++i)
    30     {
    31         scanf("%d",&v[i]);
    32     }
    33     for(int i=1; i<=n; ++i)
    34     {
    35         scanf("%d",&w[i]);
    36     }
    37     for(int i=1; i<=n; ++i)
    38     {
    39         scanf("%d",&p[i]);
    40     }
    41     dfs(0,0);
    42     if(minn==INF)
    43         printf("NO
    ");
    44     else printf("%d
    ",minn);
    45     return 0;
    46 }

    C题——Low||high:

     

    给出的数组q维护的是p序列前缀最大值,要求求出满足数组q的p序列个数。

    根据前缀最大值的性质可以得出一个数从左到右第一次在数组q中出现的位置一定是它在p序列中的位置,而它重复出现的位置在p序列中一定对应比它小且没有出现过的数。因此我们只需要从左到右遍历数组q,遇到第一次出现的数就将它填入p序列,遇到重复出现的数就选择一个比它小且尚未出现的数填入p序列,根据排列,就能算出一共有多少种填法了。

     

    代码:

     1 #include<stdio.h>
     2 #define max(a,b) a>b?a:b
     3 const long long mod=1000000007;
     4 int main()
     5 {
     6     int t;
     7     scanf("%d",&t);
     8     while(t--)
     9     {
    10         int n;
    11         scanf("%d",&n);
    12         long long ans=1,sum=0,now,bef=0;
    13         for(int i=1;i<=n;i++){
    14             scanf("%lld",&now);//直接在输入的时候计算
    15             if(now>bef) sum+=now-bef-1;//记录有多少个比当前值小且没出现过的数
    16             else ans=(ans*sum--)%mod;//填入一个值,计算排列,未出现过的数数量减一
    17             bef=now;
    18         }
    19         printf("%lld
    ",max(ans,0));//结果只可能是非负数
    20     }
    21     return 0;
    22 }

    H题——NYOJ动物统计:

    题目描述的字典树部分可以不看(给你说可以用字典树来做,又没说必须用它来做)

    看一下数据又不大,那就暴力写呗

    直接看代码吧

    代码:

     1 //#include <iostream>
     2 //#include <cstdio>
     3 //#include <cstring>
     4 //#include <cstdlib>
     5 //#include <algorithm>
     6 //using namespace std;
     7 //typedef long long ll;
     8 //const int maxn=26;
     9 //const int mod=998244353;
    10 //typedef struct Trie* TrieNode;
    11 #include <cstdio>
    12 #include <string.h>
    13 int main()
    14 {
    15     char num[10005][15];
    16     int num_1[10000] = {0};
    17     int max = 0;
    18     int count;
    19     int count_1;
    20     scanf("%d",&count);
    21     for (int i = 0; i < count; i++)
    22     {
    23         scanf("%s",num[i]);
    24         for(int j = 0; j <= i; j++)
    25         {
    26             if(strcmp(num[i], num[j])==0)
    27             {
    28                 num_1[i]++;
    29             }
    30         }
    31     }
    32     for (int i =0; i < count; i++)
    33     {
    34         if( max < num_1[i])
    35         {
    36             max = num_1[i];
    37             count_1 = i;
    38         }
    39     }
    40 //    FILE *fp=NULL;
    41 //    fp=fopen("4.txt","w");
    42     printf("%s %d",num[count_1],max);
    43     //fclose(fp);
    44     return 0;
    45 }
  • 相关阅读:
    Python float() 函数
    Python bytearray() 函数
    scanner.nextInt()与scanner.nextDouble
    Scanner对象next与nextLine
    JavaDoc
    包机制
    运算符要点
    变量与常量
    test
    类型转换
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/12009470.html
Copyright © 2020-2023  润新知