The 36th ACM/ICPC Asia Regional Shanghai Site —— Warmup

来源:互联网 发布:廓尔喀弯刀 淘宝 编辑:程序博客网 时间:2024/05/16 10:23

 

//昨天做了一下以前的上海热身赛,贴一下代码留个纪念

 

//1001-贪心

代码如下:

#include<stdio.h>__int64 num[110000];int main(){int n,cass,cas,i;__int64 a,b,ans,tem;scanf("%d",&cass);for(cas=1;cas<=cass;cas++){scanf("%d%I64d%I64d",&n,&a,&b);for(i=1;i<=n;i++)scanf("%I64d",&num[i]);ans=a+b;for(i=2;i<=n;i++){tem=(num[i]-num[i-1]-1)*b;if(tem<a*2)ans+=tem;else ans+=a*2;ans+=b;}ans+=a;printf("Case #%d: %I64d\n",cas,ans);}return 0;}


//1005-规律题,枚举几组数据,再加上用例就可以推出规律了

//代码如下:

#include<stdio.h>int main(){int cas,cass;double n,m,k;scanf("%d",&cass);for(cas=1;cas<=cass;cas++){scanf("%lf%lf",&m,&k);n=(m+1)*k+1;printf("Case #%d: %.8lf\n",cas,1/n);}return 0;}


//1006-搜索,利用位与运算的性质来剪枝,a&b<=MIN(a,b);

//代码如下:

#include<stdio.h>#include<algorithm>using namespace std;int n,k;__int64 v[50],Min,sum[50];void dfs(__int64 num,int dep,int p){__int64 tem=num;if(num<Min)Min=num;if(dep>=k||p>n)return;tem&=sum[p];if(tem>=Min)return;dfs(num&v[p],dep+1,p+1);dfs(num,dep,p+1);}int main(){__int64 start;int cass,cas,i;scanf("%d",&cass);for(cas=1;cas<=cass;cas++){scanf("%d%d",&n,&k);for(i=1;i<=n;i++)scanf("%I64d",&v[i]);sort(v+1,v+n+1);for(i=n-1,sum[n]=v[n];i>0;i--)sum[i]=sum[i+1]&v[i];Min=v[1];for(i=2;i<=k;i++)Min&=v[i];start=1;start<<=63;start=~start;dfs(start,0,1);printf("Case #%d: %I64d\n",cas,Min);}return 0;}


//1008-模拟题

//代码如下:

#include<stdio.h>char str[10000];int main(){int cas,cass,i,flag;scanf("%d",&cass);for(cas=1;cas<=cass;cas++){scanf("%s",str);flag=0;printf("Case #%d: ",cas);for(i=0;str[i];i++){if(flag&&(str[i]==':'||str[i]=='/'))break;if(flag)putchar(str[i]);if(str[i]=='/'&&str[i+1]=='/'){i+=2;flag=1;putchar(str[i]);}}putchar('\n');}return 0;}


//1010-分类排序+树状数组

//代码如下:

#include<stdio.h>#include<vector>#include<algorithm>using namespace std;struct node{__int64 cnt,len;};bool cmp(node a,node b){return a.cnt>b.cnt;}vector <node> customer[510000];__int64 sum[1010000];__int64 v[1010000];int lowbit(int n){return n&(-n);}void add(int p,int n,__int64 v){int i;for(i=p;i<=n;i+=lowbit(i))sum[i]+=v;}__int64 getsum(int p){__int64 ss=0;for(;p>0;p-=lowbit(p))ss+=sum[p];return ss;}int main(){int cass,cas,n,m,q,i,j,k,maxlen;scanf("%d",&cass);for(cas=1;cas<=cass;cas++){scanf("%d%d%d",&n,&m,&q);for(i=1;i<=m;i++){node tem;scanf("%d%I64d%I64d",&k,&tem.cnt,&tem.len);customer[k].push_back(tem);}maxlen=0;for(i=1;i<=n;i++){m=customer[i].size();if(m>maxlen)maxlen=m;sort(customer[i].begin(),customer[i].end(),cmp);}for(i=0;i<=maxlen;i++)sum[i]=0;for(i=1;i<=n;i++){for(j=0;j<customer[i].size();j++)add(j+1,maxlen,customer[i][j].len);}for(i=1;i<=maxlen;i++)v[i]=getsum(i);printf("Case #%d:\n",cas);while(q--){scanf("%d",&k);if(k>maxlen)k=maxlen;printf("%I64d\n",v[k]);}for(i=1;i<=n;i++)customer[i].clear();}return 0;}

原创粉丝点击