Educational Codeforces Round 57 (Rated for Div. 2) 前三个题补题

感慨

最终就做出来一个题,第二题差一点公式想错了,又是一波掉分,不过我相信我一定能爬上去的

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";
  }
}
posted @ 2018-12-30 12:52  baccano!  阅读(144)  评论(0编辑  收藏  举报