CCCherry

导航

SDNU_ACM_ICPC_2020_Winter_Practice_4th

H - Triangle

 
思路:
用了斐波那契数列,因为数列中的任意三数都无法组成三角形,所以将1,2,3,,,n变成斐波那契数列就符合条件;
 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int t,n,a,sum=0,f[6]={1,2,3,5,8,13};
 6     cin>>t;a=t;
 7     
 8     while(t--)
 9     {
10         cin>>n;
11         sum=0;
12         for(int i=0;i<6;i++)
13         {
14             if(n>=f[i])
15                 sum++;
16         }
17         cout<<"Case #"<<a-t<<": ";
18         cout<<n-sum;
19         cout<<endl;
20     }
21     
22 }

 

K - Reverse a Substring

思路:先将字符串升序排序,与原字符串比较大小,若大于等于原字符串,则说明原字符串已经是字典序最小的排列方式;否则,逐一比较两字符串中元素,不同者,输出;
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <string>
 4 using namespace std;
 5 int main()
 6 {
 7     int n;
 8     char s[300005],m[300005];
 9     cin>>n;
10     for(int i=0;i<n;i++)
11     {
12         cin>>s[i];
13         m[i]=s[i];
14     }
15     sort(m,m+n);
16     for(int i=0;i<n;i++)
17     {
18         if(m[i]<s[i])
19         {
20             cout<<"YES"<<endl<<i+1<<" ";
21             for(int j=i+1;j<n;j++)
22             {
23                 if(s[j]==m[i])
24                 {
25                     cout<<j+1<<endl;
26                     return 0;
27                 }
28             }
29         }
30     }
31     cout<<"NO";
32     
33     
34     
35 }

L - Game with Telephone Numbers

 注意:第11行,s[i]=='8' 而不是 s[i]==8

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 int main()
 5 {
 6     int n,t=0;
 7     string s;
 8     cin>>n>>s;
 9     for(int i=0;i<=n-11;i++)
10     {
11         if(s[i]=='8')
12         {
13             t++;
14         }
15     }
16     if(t<=(n-11)/2) 
17         cout<<"NO";
18     else 
19         cout<<"YES";
20 }

I - Birthday Paradox

长知识了

 

 

因此,所有人生日不同的概率为(天数-1)/天数*(天数-2)/天数*....(天数-n+1)/n;

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 using namespace std;
 5 int main()
 6 {
 7     int t,n,K;
 8     cin>>t;
 9     int a=1;
10     while(t--)
11     {
12         double sum=1.0;
13         cin>>n;
14         for(int i=1;i<=n;i++)
15         {
16             sum*=(n-i)*1.0/n;
17             if(sum<=0.5)
18             {
19                 K=i;
20                 break;
21             }
22         }
23         cout<<"Case "<<a++<<": "<<K<<endl;
24     }
25 }

 

posted on 2020-02-03 21:51  CCCherry  阅读(137)  评论(0编辑  收藏  举报