首页 > 代码库 > 07 DAY 1
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
07 DAY 1
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。