ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-04-02 09:02:42  阅读:160  来源: 互联网

标签:tmp 10 第四场 int else 训练赛 2021 ans include


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有