Codeforces Round #304 (Div. 2)
这次打得较差,差点就绿了。。。
B题,这B题竟然WA了,再看看就发现一个很严重的错误。。--!
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>using namespace std;int num[3050];int main(){int n;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++){scanf("%d",&num[i]);}sort(num,num+n);int cnt=0,ans=0;for(int i=1;i<n;i++){if(num[i]==num[i-1]){cnt++;}else {int k=num[i]-num[i-1]-1;if(k>=cnt){ans=ans+(1+cnt)*cnt/2;cnt=0;}else{ans=ans+(1+k)*k/2;cnt-=k;}ans=ans+cnt*(k+1);}}if(cnt>0){ans=ans+(1+cnt)*cnt/2;}printf("%d\n",ans);}return 0;
}
D题,可以预处理出各个数个含的质数的个数,可以用循环处理,求前缀和。循环是,从2开始,d记录下它有没有质因子,d=0则证明它当前是素数,第二层对j=i*k这样的数求它含有i的个数。如果d不为0,说明它不是素数,且由于一直循环,所以处理到它时就是已经把它所有质因子个数算出来了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
const int N=5000000;
int d[N+10];
int s[N+10];void initial(){memset(d,0,sizeof(d));s[0]=s[1]=0;for(int i=2;i<=N;i++){if(d[i]==0){d[i]++;for(int j=i+i;j<=N;j+=i){int c=j;while(c%i==0){d[j]++;c/=i;}}}s[i]=s[i-1]+d[i];}
}int main(){initial();int T,a,b;scanf("%d",&T);while(T--){scanf("%d%d",&a,&b);printf("%d\n",s[a]-s[b]);}return 0;
}
E题,二分图网络流
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;
/*
这道在开始也在想网络流,但是,看到只能移动一条边时,就无语了。。群里一讨论,对哦,二分图拆点建边,
这样就是一条边了。。。T_T我果然是渣。。 s->i建一条a[i]的边,i+n->e建一条b[i]的边。u-v就按u->v',v->u'。
注意加上u->u'
*/const int INF=0x3f3f3f3f;
const int MAXN=300;//点数的最大值
const int MAXM=2000;//边数的最大值struct Node
{int from,to,next;int cap;
}edge[MAXM];
int tol;int dep[MAXN];//dep为点的层次
int head[MAXN];
int flow[MAXN][MAXN];
int n,m;
void init()
{tol=0;memset(head,-1,sizeof(head));
}
void addedge(int u,int v,int w)//第一条变下标必须为偶数
{edge[tol].from=u;edge[tol].to=v; edge[tol].cap=w; edge[tol].next=head[u];head[u]=tol++;edge[tol].from=v;edge[tol].to=u;edge[tol].cap=0;edge[tol].next=head[v];head[v]=tol++;
}int BFS(int start,int end)
{int que[MAXN];int front,rear; front=rear=0;memset(dep,-1,sizeof(dep));que[rear++]=start;dep[start]=0;while(front!=rear){int u=que[front++];if(front==MAXN)front=0;for(int i= head[u];i!=-1; i=edge[i].next){int v=edge[i].to;if(edge[i].cap>0&& dep[v]==-1){dep[v]=dep[u]+1;que[rear++]=v;if(rear>=MAXN) rear=0;if(v==end)return 1;}}}return 0;
}
int dinic(int start,int end)
{int res=0;int top;int stack[MAXN];//stack为栈,存储当前增广路int cur[MAXN];//存储当前点的后继while(BFS(start,end)){memcpy(cur,head, sizeof(head));int u=start;top=0;while(1){if(u==end) //到达汇点{int min=INF;int loc;for(int i=0;i<top;i++)if(min>edge[stack[i]].cap){min=edge[stack[i]].cap;loc=i;}for(int i=0;i<top;i++){edge[stack[i]].cap-=min;edge[stack[i]^1].cap+=min;}res+=min; top=loc; // 以最小边的起点为源点再寻找其他增广路径u=edge[stack[top]].from;}for(int i=cur[u];i!=-1;cur[u]=i=edge[i].next) //寻找可增广的路径,即确定edge[]中以u为起点可增广的i的第一条边的位置if(edge[i].cap!=0 && dep[u]+1==dep[edge[i].to])break;if(cur[u]!=-1){stack [top++]=cur[u];u=edge[cur[u]].to;}else{if(top==0) break; //不能再增广dep[u]=-1;u= edge[stack [--top] ].from; //退栈寻找下一条}}}return res;
}int bef[MAXN],aft[MAXN];int main(){int s,e;while(scanf("%d%d",&n,&m)!=EOF){init();int sum=0; s=0; e=2*n+1;memset(flow,0,sizeof(flow));for(int i=1;i<=n;i++){scanf("%d",&bef[i]);sum+=bef[i];}int cp=sum;for(int i=1;i<=n;i++){scanf("%d",&aft[i]);sum-=aft[i];}for(int i=1;i<=n;i++){addedge(s,i,bef[i]);addedge(i+n,e,aft[i]);addedge(i,i+n,INF);}int u,v;for(int i=1;i<=m;i++){scanf("%d%d",&u,&v);addedge(u,v+n,INF);addedge(v,u+n,INF);}if(sum!=0){printf("NO");}else{int res=dinic(s,e);if(res!=cp){puts("NO");}else{puts("YES");for(int i=n+1;i<=2*n;i++){int v=i-n;for(int ei=head[i];ei!=-1;ei=edge[ei].next){int u=edge[ei].to;if(u<e){flow[u][v]=edge[ei].cap;}}}for(int i=1;i<=n;i++){printf("%d",flow[i][1]);for(int j=2;j<=n;j++)printf(" %d",flow[i][j]);printf("\n");}}}}
}
转载于:https://www.cnblogs.com/jie-dcai/p/4523897.html
Codeforces Round #304 (Div. 2)相关推荐
- 水题 Codeforces Round #304 (Div. 2) A. Soldier and Bananas
题目传送门 1 /* 2 水题:ans = (1+2+3+...+n) * k - n,开long long 3 */ 4 #include <cstdio> 5 #include < ...
- Codeforces Round #304 (Div. 2) D. Soldier and Number Game 数学 质因数个数
D. Soldier and Number Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/conte ...
- codeforces水题100道 第五题 Codeforces Round #304 (Div. 2) A. Soldier and Bananas (math)
题目链接:http://www.codeforces.com/problemset/problem/546/A 题意:一个人现在有n元,它买第i根香蕉需要i*k元,问他要买w根香蕉的话,需要问他的朋友 ...
- Codeforces Round #297 (Div. 2)E. Anya and Cubes 折半搜索
Codeforces Round #297 (Div. 2)E. Anya and Cubes Time Limit: 2 Sec Memory Limit: 512 MB Submit: xxx ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
- Codeforces Round #563 (Div. 2)/CF1174
Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...
- 构造 Codeforces Round #302 (Div. 2) B Sea and Islands
题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...
- Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...
- Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...
最新文章
- 一步步学习SPD2010--第十章节--SP网站品牌化(9)--理解SP的CSS继承
- 计算机应用类专业综合冲刺卷,2009年计算机应用类专业综合知识模拟试卷.doc
- eclipselink mysql_Eclipselink更新现有表
- idea项目名后出现中括号别名
- 【javascript】js实现复制、粘贴
- python hdf5 —— h5py
- SQL语言入坑—1.数据的检索、排序、过滤、分组
- 背包之01背包、完全背包、多重背包详解
- 2018中国旅游统计年鉴
- 直线绘制算法-中点画线法
- 北京理工大学计算机面试题,北京理工大学自主招生面试试题综合素质答案技巧.doc...
- AWS EFS vs EBS vs S3(差异和何时使用?)
- 嵌入式驱动学习之PWM蜂鸣器驱动
- C#之 正则表达式和特殊字符
- 励销云全流程智能销售解决方案,助力B2B企业高效增长
- back track 5 / BT5 默认用户名密码
- 孙溟㠭书画《野狐禅》
- Linux当中如何隐藏和查看进程
- 娃娃鸭Delphi面向对象编程思想刘艺笔记
- 使用PDF处理控件Aspose.PDF以编程方式打印PDF文档完整攻略