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