A.数学题
#include<bits/stdc++.h>
using namespace std;
int main()
{
double k,n,s,p;
cin>>k>>n>>s>>p;
int x=(int)ceil(ceil(n/s)*k/p);
cout<<x<<endl;
return 0;
}
B.暴力
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int>PII;
const int maxn=100+5;
char s[maxn][maxn];
int t[maxn][maxn];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
memset(t,0,sizeof(t));
for(int i=0;i<n;i++)
scanf("%s",&s[i]);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(s[i][j]=='.') {
//ËÄ·½ÏòÅжÏ
bool flag=true;
for(int k=0;k<m;k++)
{
if(i+k<0||i+k>=n||s[i+k][j]=='#') flag=false;
}
if(flag) {
for(int k=0;k<m;k++)
{
t[i+k][j]++;
}
}
flag=true;
for(int k=0;k<m;k++)
{
if(i-k<0||i-k>=n||s[i-k][j]=='#') flag=false;
}
if(flag) {
for(int k=0;k<m;k++)
{
t[i-k][j]++;
}
}
flag=true;
for(int k=0;k<m;k++)
{
if(j-k<0||j-k>=n||s[i][j-k]=='#') flag=false;
}
if(flag) {
for(int k=0;k<m;k++)
{
t[i][j-k]++;
}
}
flag=true;
for(int k=0;k<m;k++)
{
if(j+k<0||j+k>=n||s[i][j+k]=='#') flag=false;
}
if(flag) {
for(int k=0;k<m;k++)
{
t[i][j+k]++;
}
}
}
int res=0;
PII f;
f=PII(1,1);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(t[i][j]>res) {
res=t[i][j];
f.first=i+1;
f.second=j+1;
}
printf("%d %d\n",f.first,f.second);
return 0;
}
C.思维题
因为D比较小,所以枚举D,要想第一个人分得最多,那么第一个人分得次数为i次,其余人为i-1次
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
LL n,m,k,d;
cin>>n>>k>>m>>d;
LL ans=0;
for(LL i=1;i<=d;i++)
{
LL x=n/(k*i-k+1);
if(!x) break;
if(x>m) x=m;
LL f=n/(k*x)+(n%(k*x)>=x?1:0);
if(f>i) continue;
ans=max(ans,x*f);
}
cout<<ans<<endl;
return 0;
}
D.思维题 数学题
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
const int INF=0x3f3f3f3f;
int main()
{
int w,l;
scanf("%d%d",&w,&l);
int a[maxn],cnt=INF;
a[0]=0;
for(int i=1;i<w;i++)
{
int t;
scanf("%d",&t);
a[i]=a[i-1]+t;
if(i>=l) {
cnt=min(cnt,a[i]-a[i-l]);
}
}
cout<<cnt<<endl;
return 0;
}