Educational Codeforces Round 57 (Rated for Div. 2) 前三個題補題
阿新 • • 發佈:2018-12-30
感慨
最終就做出來一個題,第二題差一點公式想錯了,又是一波掉分,不過我相信我一定能爬上去的
A Find Divisible(思維)
上來就T了,後來直接想到了題解的O(1)解法,直接輸出左邊界和左邊界*2即可
程式碼
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long x,y,t; cin>>t; while(t--) { cin>>x>>y; cout<<x<<" "<<x*2<<"\n"; } }
B Substring Removal(思維)
我這裡想到了有兩種情況,其中第一種情況想的完全是正確的,第二種情況想的公式有問題。正確公式是(l+1) ×(r+1)我當時直接想的是l×r+2
程式碼
#include <bits/stdc++.h> using namespace std; int bk[300],bk1[300],mk[300],p,sum; long long ans; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n,t1=0,t2=0; cin>>n; string a; cin>>a; for(int i=0;i<a.size();i++) bk[a[i]-'a']++; for(int i=0;i<26;i++) if(bk[i]>=2) sum++,mk[p++]=i,bk1[i]++; for(int i=0;i<a.size();i++) if(a[i]==a[0]) t1++; else break; for(int i=a.size()-1;i>=0;i--) if(a[i]==a[a.size()-1]) t2++; else break; if(a[0]==a[a.size()-1]) { ans=(t1+1)*(t2+1); ans%=998244353; cout<<ans; } else cout<<t1+t2+1; }
C Polygon for the Angle(數學)
完全的數學題,這裡得記住這個結論
正多邊形中存在的角度的範圍是180k/n(其中n是邊數,1<=k<=n-2)
這樣我們可以求出每個正多邊形都有可能有多少度角了
具體直接的演算法是運用gcd,其中gnu包含了一個內建的gcd函式__gcd
算出給定的角度與180的gcd,然後用原來的角度/gcd算出了k然後180/gcd算出了n
其中如果k+1==n那麼n*=2因為要保證k<=n-2
程式碼
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin>>t; while(t--) { int ang; cin>>ang; int g=__gcd(ang,180); int k=ang/g; int n=180/g; if(k+1==n) k*=2,n*=2; cout<<n<<"\n"; } }