首页 > 代码库 > 20140710总结
20140710总结
今天第一题很水,主要坑在负数上,不多说,上代码。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 long long N,K; 6 long long a[1000000]; 7 long long flags[1000000]; 8 int main() 9 {10 scanf("%I64d%I64d",&N,&K);11 memset(a,0,sizeof(a));12 memset(flags,0,sizeof(flags));13 for(int i=1;i<=N;i++)14 {15 scanf("%I64d",&a[i]);16 a[i]=(a[i]+a[i-1])%K;17 while(a[i]<0)18 a[i]+=K;19 a[i]%=K;20 }21 for(int i=0;i<=N;i++)22 flags[a[i]%K]++;23 long long ans=0;24 for(int i=0;i<K;i++)25 ans+=max(0LL,flags[i]*(flags[i]-1)/2);26 printf("%I64d\n",ans);27 }
今天第二题,二分答案+spfa找负环。思路很清晰,大意就是因为直接找简单回路要记录有哪些点走了,走了那些边。于是考虑二分答案,判合法,判的方法是:减掉答案,如果存在一条回路使答案<=0,那么答案一定合法。这让人想到了负环(其实是非正环)。做法是spfa,如果dis[to]>=dis[now]+len; (注意“=”很重要)能一直更新(更新了点数次以上),那么说明有负环。
我当场之所以WA40,后来查错,才发现是INF开小了!!!!!洗内!!!!!!
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 using namespace std; 6 struct JackSlowFuck 7 { 8 int from,to,len,next; 9 }Fu[1010];10 int node[610];11 int now;12 double dis[610];13 bool in[610];14 int N,M,f,t,l;15 int cs[610];16 void addedge(int f,int t,int l)17 {18 Fu[++now].next=node[f];19 node[f]=now;20 Fu[now].to=t;21 Fu[now].len=l;22 }23 bool spfa(int s,double ch)24 {25 for(int i=1;i<=N;i++)26 dis[i]=100000000.0;27 memset(cs,0,sizeof(cs));28 memset(in,0,sizeof(in));29 dis[s]=0.0;30 queue <int> Q;31 Q.push(s);32 while(!Q.empty())33 {34 int nn=Q.front();35 Q.pop();36 cs[nn]++;37 if(cs[nn]>N+10)38 return true;39 in[nn]=false;40 for(int k=node[nn];k;k=Fu[k].next)41 {42 if(dis[Fu[k].to]>=dis[nn]+Fu[k].len-ch)43 {44 dis[Fu[k].to]=dis[nn]+Fu[k].len-ch;45 if(!in[Fu[k].to])46 {47 in[Fu[k].to]=true;48 Q.push(Fu[k].to);49 }50 }51 }52 }53 return false;54 }55 int main()56 {57 scanf("%d%d",&N,&M);58 for(int i=1;i<=M;i++)59 {60 scanf("%d%d%d",&f,&t,&l);61 addedge(f,t,l);62 }63 double l=0.0,r=10000000.0;64 while(r-l>0.00001)65 {66 double mid=(l+r)/2;67 if(spfa(1,mid))68 r=mid;69 else70 l=mid;71 }72 printf("%.2lf\n",r);73 }
第三题不会。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。