好容易手速快了一场,数组开小继续王八绿。。。
A - Roman and Browser
看懂题意直接暴力。。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const double epos=1e-8;
int arr[109];
int flag[109];
int main(){
ios::sync_with_stdio(false);
int n,k;
cin>>n>>k;
memset(flag,0,sizeof(flag));
int e=0,l=0;
for(int i=1;i<=n;i++){
cin>>arr[i];
if(arr[i]==-1) ++e;
else ++l;
}
int ma=-1;
for(int b=0;b<=n;b++){
int ee=e,ll=l;
for(int i=1;i<=n;i++){
if(abs(i-b)%k==0){
if(arr[i]==-1) ee--;
else --ll;
}
}
ma=max(ma,abs(ll-ee));
}
cout<<ma<<endl;
return 0;
}
B - Build a Contest
题意很简单:n个难度m个题,如果加入一个题的某个时刻存在一个大小为n的子集 并且这个子集的难度都不一样就把这个子集拿出来。通俗一点就是每次加入的题目判断是否与之前已加入的难度不同,并且难度不同的题目是否已有n个,有的的话删去这一整部分。达成上面的两个约束条件输出1否则输出0.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
#define maxn 10000000
int n,m;
int a[maxn];
int b[maxn];
int ans[maxn];
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
int num=0;
for(int i=0;i<m;i++){
cin>>a[i];
if(b[a[i]]==0) num++;
b[a[i]]++;
if(num==n){
ans[i]=1;
num=0;
for(int j=1;j<=n;j++){
b[j]--;
if(b[j]>0) num++;
}
}else{
ans[i]=0;
}
}
for(int i=0;i<m;i++){
cout<<ans[i];
}
cout<<endl;
return 0;
}
PS:手快也要开好数组大小。。。不是第一次了。。。痛失上分机会
C - NN and the Optical Illusion
如图,
长度为2r的边就是正n边形的边,那么
有余弦定理,所以这里的
,化简即可
#include<bits/stdc++.h>
using namespace std;
int main(){
double a,b;
cin>>a>>b;
double st = 2.0*acos(-1)/a;
double c = sin(st/2.0);
double x = c*b/(1-c);
printf("%.7f",x);
return 0;
}