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 }