第七周周赛题解

比赛链接——点我

 

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\n");
44     else printf("%d\n",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\n",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 }

 

 

posted @ 2019-12-09 10:30  kongbursi  阅读(388)  评论(0编辑  收藏  举报