https://www.luogu.com.cn/training/105#problems

P5735 【深基7.例1】距离函数

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. double x[15],y[15];
  4. double solve(double x,double y,double xx,double yy)
  5. {
  6. return sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy));
  7. }
  8. int main(void)
  9. {
  10. for(int i=0;i<3;i++) cin>>x[i]>>y[i];
  11. double sum=0;
  12. sum+=solve(x[0],y[0],x[1],y[1]);
  13. sum+=solve(x[0],y[0],x[2],y[2]);
  14. sum+=solve(x[1],y[1],x[2],y[2]);
  15. printf("%.2lf",sum);
  16. return 0;
  17. }

P5736 【深基7.例2】质数筛

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int a[105],n;
  4. int main(void)
  5. {
  6. cin>>n;
  7. for(int i=0;i<n;i++)
  8. {
  9. cin>>a[i];
  10. int flag=0;
  11. for(int j=2;j<=sqrt(a[i]);j++)
  12. if(a[i]%j==0) flag=1;
  13. if(!flag&&a[i]!=1) cout<<a[i]<<" ";
  14. }
  15. return 0;
  16. }

P5737 【深基7.例3】闰年展示

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int l,r;
  4. vector<int>ve;
  5. int check(int x)
  6. {
  7. if(x%400==0||(x%4==0&&x%100!=0)) return 1;
  8. return 0;
  9. }
  10. int main(void)
  11. {
  12. cin>>l>>r;
  13. for(int i=l;i<=r;i++)
  14. if(check(i)) ve.push_back(i);
  15. cout<<ve.size()<<endl;
  16. for(int i=0;i<ve.size();i++) cout<<ve[i]<<" ";
  17. return 0;
  18. }

P5738 【深基7.例4】歌唱比赛

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n,m,a[105];
  4. double ans;
  5. int main(void)
  6. {
  7. cin>>n>>m;
  8. for(int i=1;i<=n;i++)
  9. {
  10. double sum=0;
  11. for(int j=0;j<m;j++) cin>>a[j],sum+=a[j];
  12. sort(a,a+m);
  13. ans=max(ans,(sum-a[0]-a[m-1])/(m-2));
  14. }
  15. printf("%.2lf",ans);
  16. return 0;
  17. }

P5739 【深基7.例7】计算阶乘

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(void)
  4. {
  5. long long int n; cin>>n;
  6. long long int sum=1;
  7. while(n) sum*=n,n--;
  8. cout<<sum;
  9. return 0;
  10. }

P5461 赦免战俘

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1050;
  4. int a[N][N],n;
  5. int main(void)
  6. {
  7. cin>>n;
  8. n=pow(2,n);
  9. a[1][n]=1;
  10. for(int i=2;i<=n;i++)
  11. {
  12. for(int j=1;j<=n;j++)
  13. a[i][j]=(a[i-1][j]+a[i-1][j+1])%2;
  14. }
  15. for(int i=1;i<=n;i++)
  16. {
  17. for(int j=1;j<=n;j++) cout<<a[i][j]<<" ";
  18. cout<<endl;
  19. }
  20. return 0;
  21. }
  22. //0 1
  23. //1 1
  24. //0 0 0 1
  25. //0 0 1 1
  26. //0 1 0 1
  27. //1 1 1 1
  28. //0 0 0 0 0 0 0 1
  29. //0 0 0 0 0 0 1 1
  30. //0 0 0 0 0 1 0 1
  31. //0 0 0 0 1 1 1 1
  32. //0 0 0 1 0 0 0 1
  33. //0 0 1 1 0 0 1 1
  34. //0 1 0 1 0 1 0 1
  35. //1 1 1 1 1 1 1 1
  36. 12345678910111213141516171819202122232425262728293031323334353637
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1050;
  4. int a[N][N],n;
  5. void dfs(int n,int x,int y)
  6. {
  7. if(n==1) return;
  8. for(int i=x;i<=x+n/2-1;i++)
  9. for(int j=y;j<=y+n/2-1;j++) a[i][j]=0;
  10. dfs(n/2,x,y+n/2);
  11. dfs(n/2,x+n/2,y);
  12. dfs(n/2,x+n/2,y+n/2);
  13. }
  14. int main(void)
  15. {
  16. cin>>n;
  17. n=pow(2,n);
  18. for(int i=1;i<=n;i++)
  19. for(int j=1;j<=n;j++) a[i][j]=1;
  20. dfs(n,1,1);
  21. for(int i=1;i<=n;i++)
  22. {
  23. for(int j=1;j<=n;j++)
  24. {
  25. cout<<a[i][j]<<" ";
  26. }
  27. puts("");
  28. }
  29. return 0;
  30. }

P5740 【深基7.例9】最厉害的学生

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node
  4. {
  5. string name;
  6. int a,b,c,id;
  7. }temp;
  8. int n;
  9. vector<node>ve;
  10. bool cmp(node a,node b)
  11. {
  12. if(a.a+a.b+a.c!=b.a+b.b+b.c) return a.a+a.b+a.c>b.a+b.b+b.c;
  13. return a.id<b.id;
  14. }
  15. int main(void)
  16. {
  17. cin>>n;
  18. for(int i=0;i<n;i++)
  19. {
  20. cin>>temp.name>>temp.a>>temp.b>>temp.c;
  21. temp.id=i;
  22. ve.push_back(temp);
  23. }
  24. sort(ve.begin(),ve.end(),cmp);
  25. cout<<ve[0].name<<" "<<ve[0].a<<" "<<ve[0].b<<" "<<ve[0].c;
  26. return 0;
  27. }

P5741 【深基7.例10】旗鼓相当的对手 - 加强版

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node
  4. {
  5. string name;
  6. int a,b,c;
  7. }temp;
  8. vector<node>ve;
  9. vector< pair<string,string> >s;
  10. int n;
  11. int main(void)
  12. {
  13. cin>>n;
  14. for(int i=0;i<n;i++)
  15. {
  16. cin>>temp.name>>temp.a>>temp.b>>temp.c;
  17. ve.push_back(temp);
  18. }
  19. for(int i=0;i<n;i++)
  20. {
  21. for(int j=i+1;j<n;j++)
  22. {
  23. if(abs(ve[i].a-ve[j].a)>5) continue;
  24. if(abs(ve[i].b-ve[j].b)>5) continue;
  25. if(abs(ve[i].c-ve[j].c)>5) continue;
  26. if(abs(ve[i].a+ve[i].b+ve[i].c-ve[j].a-ve[j].b-ve[j].c)>10) continue;
  27. if(ve[i].name<=ve[j].name) s.push_back({ve[i].name,ve[j].name});
  28. else s.push_back({ve[j].name,ve[i].name});
  29. }
  30. }
  31. sort(s.begin(),s.end());
  32. for(int i=0;i<s.size();i++) cout<<s[i].first<<" "<<s[i].second<<endl;
  33. return 0;
  34. }

P5742 【深基7.例11】评等级

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(void)
  4. {
  5. int n; cin>>n;
  6. while(n--)
  7. {
  8. int id,a,b; cin>>id>>a>>b;
  9. int sum=a+b;
  10. if(sum>140&&(a*7+b*3>=800)) cout<<"Excellent"<<endl;
  11. else cout<<"Not excellent"<<endl;
  12. }
  13. return 0;
  14. }

P1075 [NOIP2012 普及组] 质因数分解

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int check(int x)
  4. {
  5. for(int i=2;i<=x/i;i++)
  6. if(x%i==0) return 0;
  7. return 1;
  8. }
  9. int main(void)
  10. {
  11. int n; cin>>n;
  12. for(int i=2;i<=n/i;i++)
  13. {
  14. if(n%i==0)
  15. {
  16. if(check(i)&&check(n/i))
  17. {
  18. cout<<n/i;
  19. return 0;
  20. }
  21. }
  22. }
  23. return 0;
  24. }

P1304 哥德巴赫猜想

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e5+10;
  4. int prime[N],st[N],cnt;
  5. void init(int n)
  6. {
  7. st[0]=1,st[1]=1;
  8. for(int i=2;i<=n;i++)
  9. {
  10. if(!st[i]) prime[cnt++]=i;
  11. for(int j=0;prime[j]<=n/i;j++)
  12. {
  13. st[i*prime[j]]=1;
  14. if(i%prime[j]==0) break;
  15. }
  16. }
  17. }
  18. int main(void)
  19. {
  20. init(1e5);
  21. int n; cin>>n;
  22. for(int i=2;i<=n;i+=2)
  23. {
  24. for(int j=0;j<cnt;j++)
  25. {
  26. if(prime[j]>i) break;
  27. if(!st[i-prime[j]])
  28. {
  29. printf("%d=%d+%d\n",i,prime[j],i-prime[j]);
  30. break;
  31. }
  32. }
  33. }
  34. }

P1217 [USACO1.5]回文质数 Prime Palindromes

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e7+10;
  4. int prime[N],st[N],cnt;
  5. int l,r;
  6. void init(int n)
  7. {
  8. for(int i=2;i<=n;i++)
  9. {
  10. if(!st[i]) prime[cnt++]=i;
  11. for(int j=0;prime[j]<=n/i;j++)
  12. {
  13. st[i*prime[j]]=1;
  14. if(i%prime[j]==0) break;
  15. }
  16. }
  17. }
  18. int check(int x)
  19. {
  20. string s=to_string(x);
  21. for(int i=0;i<s.size()/2;i++)
  22. {
  23. if(s[i]!=s[s.size()-1-i]) return 0;
  24. }
  25. return 1;
  26. }
  27. int main(void)
  28. {
  29. init(1e7);
  30. cin>>l>>r;
  31. for(int i=0;i<cnt;i++)
  32. {
  33. if(prime[i]>=l&&prime[i]<=r&&check(prime[i]))
  34. cout<<prime[i]<<endl;
  35. }
  36. return 0;
  37. }

P2415 集合求和

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. vector<int>ve;
  4. long long int n,sum;
  5. int main(void)
  6. {
  7. while(cin>>n) ve.push_back(n);
  8. long long int cnt=pow(2,ve.size()-1);
  9. for(int i=0;i<ve.size();i++) sum+=cnt*ve[i];
  10. cout<<sum;
  11. return 0;
  12. }

P5743 【深基7.习8】猴子吃桃

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(void)
  4. {
  5. int n; cin>>n;
  6. int sum=1;
  7. for(int i=n-1;i>=1;i--) sum+=1,sum*=2;
  8. cout<<sum;
  9. return 0;
  10. }

P5744 【深基7.习9】培训

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(void)
  4. {
  5. int n; cin>>n;
  6. while(n--)
  7. {
  8. string name; cin>>name;
  9. int age,score; cin>>age>>score;
  10. score=score*1.2;
  11. score=min(score,600);
  12. cout<<name<<" "<<age+1<<" "<<score<<endl;
  13. }
  14. return 0;
  15. }