07 DAY 1

壮烈的一天。。。

第一题

本意是水题,然后写了块状数组模拟,最后发现算法错了。。。

然后其实快排一遍扫一遍完事。。。 100分

#include <cstdio>
#include <algorithm>
#define min(a,b) ((a)<(b)?(a):(b))
struct node{
int a,b;
} d[400000];
int i,n,a,b,l,m,j,k;
int pl;
bool cmp(node a,node b){
return a.a<b.a;
}
int main(){
freopen("cut.in","r",stdin);
freopen("cut.out","w",stdout);
scanf("%d",&n);
for(i=0;i<n;++i){
scanf("%d%d",&a,&b);
d[i].a=a;
d[i].b=b;
}
std::sort(d,d+n,cmp);
pl=n;
for(i=0;i<pl;++i){
j=i-1,k=i+1;
if(k==pl) b=10000000; else b=d[k].a-d[i].a;
if(j<0) a=10000000; else a=d[i].a-d[j].a;
l+=d[i].b-min(min(a,b),d[i].b);
}
printf("%d\n",l);
return 0;
}

第二题

我等蒟蒻只能爆搜骗分 30分

#include <cstdio>
int a[40],n,p,c,i;
unsigned int k;
void search(int f,int s){//大神我的大法师哪儿错了?
if(f==n){
if(s==c) ++k;
return;
}
search(f+1,s);
search(f+1,(s*a[f+1])%p);
}
int main(){
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
scanf("%d %d %d",&n,&p,&c);
for(i=0;i<n;++i) scanf("%d",a+i);
search(0,1);
search(0,a[0]);
printf("%d",k%1000000007);
return 0;
}

第三题

果然是太弱了。。。只会二分答案贪心检验 40分代码

#include <cstdio>
int n,s,i,f[2000],k,ans,left,right,mid,last,t;
bool ok(int p){
last=0;
t=s-f[0]+15;
if(t<=0)return false;
for(i=1;i<n;++i){
t-=f[i];
if(i==last+p){
t+=p*15;
last=i;
}
if(t<=0) return false;
}
return true;
}
int main(){
freopen("magic.in","r",stdin);
freopen("magic.out","w",stdout);
scanf("%d %d",&n,&s);
for(i=0;i<n;++i){
scanf("%d",f+i);
k+=f[i];
}
if(k<s){
printf("No upper bound.");
return 0;
}
if(!ok(1)){
printf("-1\n");
return 0;
}
ans=0;
left=1;
right=n;
while(left<=right){
mid=(left+right)/2;
if(ok(mid)){
ans=mid;
left=mid+1;
}else{
right=mid-1;
}
}
printf("%d\n",ans);
return 0;
}

最后无限膜拜L.Z.W大神 @vb4896

上一篇:Java JDK下载、安装和验证


下一篇:iperf测试工具