第七周周賽題解


比賽鏈接——點我

 

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 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM