A
题意:略
题记:略
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int a[N];
int main(){
cin>>a[0]>>a[1]>>a[2];
sort(a,a+3);
cout<<max(0,a[2]-a[1]-a[0]+1)<<endl;
return 0;
}
B
题意:略
题记:找字符串的最长公共前后缀,用substr()函数或者求next函数。
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int nxt[N];
char s[N];
int n,k;
void getnext(){
int i=0,j=-1;
nxt[0]=-1;
while(i<n){
if(j==-1||s[i]==s[j])
i++,j++,nxt[i]=j;
else
j=nxt[j];
}
}
int main(){
cin>>n>>k;
cin>>s;
getnext();
cout<<s;
for(int i=1;i<=k-1;i++)
cout<<(s+nxt[n]);
return 0;
}
C
题意:略
题记:总共可以看到n/x个灯笼,r/x表示1~ r能看到多少灯笼,(l-1)/x表示1 ~ (l-1)能看到多少灯笼。(n/x)-r/x+(l-1)/x即答案。
#include<bits/stdc++.h>
using namespace std;
const int N=110;
void solve(){
int n,x,l,r;
cin>>n>>x>>l>>r;
cout<<(n/x)-r/x+(l-1)/x<<endl;
}
int main(){
int T;
cin>>T;
while(T--){
solve();
}
return 0;
}
D
题意:略
题记:每次sum都能减去一个(a-b),所以将(a-b)作为关键字降序排序,每次将sum减一下即可。最后再判断一下sum是否大于m。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
struct Node{
int a,b;
bool operator<(const Node &W)const{
return a-b>W.a-W.b;
}
}t[N];
void solve(){
int n,m;
cin>>n>>m;
ll sum=0;
for(int i=1;i<=n;i++){
cin>>t[i].a>>t[i].b;
sum+=t[i].a;
}
sort(t+1,t+1+n);
int ans=0;
for(int i=1;i<=n;i++){
if(sum<=m) break;
sum-=t[i].a-t[i].b;
ans++;
}
if(sum<=m) cout<<ans<<endl;
else cout<<"-1"<<endl;
}
int main(){
int T=1;
//cin>>T;
while(T--){
solve();
}
return 0;
}
E
题意:略
题记:
C语言的sin函数需要传递的是弧度,弧度=角度*pi/180
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const double pi=acos(-1.0);
int main(){
double n,r;
cin>>n>>r;
double s=sin(360/(n*2)*(pi/180));
double ans=(s*r)/(1-s);
printf("%.8f\n",ans);
return 0;
}