其他分享
首页 > 其他分享> > 2021年度训练联盟热身训练赛第四场

2021年度训练联盟热身训练赛第四场

作者:互联网

D.Happy Number

思路:直接模拟就行

想法:我记得天梯赛好像有个类似的题,是求幸福度的

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<map>
 7 using namespace std;
 8 int main(){
 9     map<long long int,long long int> s;
10     long long int n;
11     scanf("%lld",&n);
12     int sum=0;
13     int flag=0;
14     while(1){
15         sum=0;
16         while(!(n%10==0&&n/10==0)){
17             sum+=(n%10)*(n%10);
18             n/=10;
19         }
20         if(sum==1){
21             flag=1;
22             break;
23         }
24         n=sum;
25         if(s[n]==1){
26             break;
27         }
28         s[n]=1;
29     }
30     if(flag==1){
31         printf("HAPPY\n");
32     }else{
33         printf("UNHAPPY\n");
34     }
35 }
View Code

C.Game Map

题目:给定一个图,已知点和边,如果选中的点度严格从小到大递增,问这样的点最多能包含多少个

思路:用Vector存储已知的边,用ans数组进行剪枝判定,类似于染色法进行标记,具体vector的格式见代码

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<map>
 7 #include<vector>
 8 using namespace std;
 9 const int maxx=1e5+10;
10 vector<int> s[maxx];
11 long long int ans[maxx]={0};
12 int n,m;
13 long long int dfs(int p){
14     if(ans[p]==0){
15         ans[p]=1;
16         for(int i=0;i<s[p].size();i++){
17             if(s[s[p][i]].size()>s[p].size()){
18 
19                 ans[p]=max(ans[p],dfs(s[p][i])+1);
20             }
21         }
22     }
23     return ans[p];
24 }
25 
26 int main(){
27     scanf("%d %d",&n,&m);
28     for(int i=0;i<m;i++){
29         int x,y;
30         scanf("%d %d",&x,&y);
31         int len=s[x].size();
32         s[x].push_back(y);
33         s[y].push_back(x);
34     }
35     long long int sum=0;
36     for(int i=0;i<n;i++){
37         if(ans[i]==0){
38             long long int t=dfs(i);
39             sum=max(sum,t);
40         }
41     }
42     printf("%lld\n",sum);
43 }
View Code

 F.Philosopher‘s Walk

题目:就是通过不断地旋转和一定的规则然后制作出来了一些图形,问给定边长和条数,此时的位置坐标是多少

思路:看到这道题的时候根本就是没有感觉的,后来才知道这个题直接从大的方向不断变换到小的位置,再进行判断到底是哪个位置

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 using namespace std;
 7 struct point{
 8     int x,y;
 9 };
10 point dfs(int n,int m){
11     point tmp;
12     if(n==2){
13         if(m==0){
14             tmp.x=1;
15             tmp.y=1;
16         }else if(m==1){
17             tmp.x=1;
18             tmp.y=2;
19         }else if(m==2){
20             tmp.x=2;
21             tmp.y=2;
22         }else if(m==3){
23             tmp.x=2;
24             tmp.y=1;
25         }
26         return tmp;
27     }
28         int p=m/(n*n/4);
29         int mod=m%(n*n/4);
30         tmp=dfs(n/2,mod);
31         if(p==0){
32             swap(tmp.x,tmp.y);
33             return tmp;
34         }else if(p==1){
35             tmp.y+=n/2;
36             return tmp;
37         }else if(p==2){
38             tmp.y+=n/2;
39             tmp.x+=n/2;
40             return tmp;
41         }else if(p==3){
42             int x=n+1-tmp.y;
43             int y=n/2+1-tmp.x;
44             return (point){x,y};
45         }
46 
47 }
48 int main(){
49     int m,n;
50     scanf("%d %d",&n,&m);
51     point a=dfs(n,--m);
52     printf("%d %d\n",a.x,a.y);
53 
54 }
View Code

想法:最近也没怎么好好准备比赛,感觉一直是在吃老底,不进则退的感觉,最近忙的稀里糊涂的,cf也没跟上,就想着忙完这段时间好好拾起来这些东西,最近专业课没落下我就感到很高兴了,下周忙完团支部的事情大概就能好好忙训练和专业课了。

标签:tmp,10,第四场,int,else,训练赛,2021,ans,include
来源: https://www.cnblogs.com/bonel/p/14594391.html