题目总链接:https://codeforces.com/contest/1096
A. Find Divisible
题意:
给出l,r,在[l,r]里面找两个数x,y,使得y%x==0,保证有解。
题解:
直接输出l,2*l就好啦,但我还是写了个循环...
代码如下:
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 10; int T; ll l,r; int main(){ cin>>T; while(T--){ scanf("%I64d%I64d",&l,&r); for(ll i=l;i<=r;i++){ if(i*2<=r){ printf("%I64d %I64d\n",i,2*i); break ; } } } return 0; }
B. Substring Removal
题意:
给出一个字符串,现在要你删掉一个子串,使得剩下的串有不多于一个的字符。
题解:
从两端找连续的相同字符串并且统计个数,然后算算就可以了。
注意一下所有字符串都相等的情况。
还有一种情况就是两段连续的字符串字符都相等,那么这时就可以删掉中间的,这个个数也比较好统计。
具体见代码(注意中间计算过程不要爆int):
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e5+5,MOD = 998244353; int n; char s[N]; int main(){ scanf("%d",&n); scanf("%s",s); char fir = s[0]; int i; ll cnt1=1,cnt2=1; for(i=1;i<n;i++){ if(s[i]==fir) cnt1++; else break ; } char last = s[n-1]; for(i=n-2;i>=0;i--){ if(s[i]==last) cnt2++; else break ; } ll ans = (cnt1+cnt2+1)%MOD; if(last==fir){ ans=(ans+cnt1*cnt2)%MOD; } cout<<ans<<endl; return 0; }
C. Polygon for the Angle
题意:
给出一个角度(0<=angle<180),求出最小的正多边形,满足其中存在一个内接三角形的内角与给出的角度相等。
题解:
我的做法比较暴力了,先说说我的吧:
n边形的内角和为(n-2)*180,然后可以知道其每个内角为(n-2)*180/n,利用外接圆+一些圆的性质(圆心角等于二倍圆周角)可以知道一个正n边形的内接三角形的最小角为180/n。
之后只要判断angle%(180/n)是否为0就是了。注意最小角可以为小数,所以我直接是暴力循环...
正解是这样的,首先推出最小角为180/n,然后如果满足angle%(180/n)==0的话,则有n*angle=t*180。
由于180和angle为已知量,我们就可以求出g=gcd(angle,180),然后等式则有n*angle/g = t*180/g。
由这可以知道n=x*180/g , t=y*angle/g,我们知道,这里的t满足t*180/n=angle,当t=n-2时,这时就是正多边形的内角,所以有限制条件:1<=t<=n-2。
我们取x=y=1,这里的n就是答案了(贪心),但是可能会存在这种情况:t=n-1,这时不符合限制条件的,这里我们只要取x=2就行了。
可以证明,当x>=2时,t<=n-2恒成立。
给出我的暴力代码....
#include <bits/stdc++.h> using namespace std; typedef long long ll; int T; int ang; int main(){ cin>>T; while(T--){ scanf("%d",&ang); double ans ; int flag; for(int i=3;i<=360;i++){ ans = (double)180/i; flag=0; if(180%i!=0) for(int j=1;;j++){ if(j*ans>ang){ flag=1; break ; }else if((double)j*ans==(double)ang){ cout<<i<<endl; flag=2; break ; } } if(flag==1) continue ; else if(flag==2) break ; if(ang%(int)ans==0&&ans*(i-2)>=ang){ cout<<i<<endl; break ; } } } return 0; }