A:

考你会不会除法

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
signed main(){
scanf("%I64d%I64d",&n,&k);
int t=n/(*(k+));
printf("%I64d %I64d %I64d\n",t,t*k,n-t*(k+));
}

B:

按照题意模拟

竟然挂了三次......

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int N=;
int n,m,l[N],a[N],stk[N],top,vis[N];
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
scanf("%d",&l[i]);
}
for(int i=;i<=m;i++){
int dis=(l[i]-l[i-]+n)%n;
if(dis==)dis=n;
if(!a[l[i-]]||a[l[i-]]==dis)a[l[i-]]=dis;
else {puts("-1");return ;}
}
for(int i=;i<=n;i++){
if(!a[i])continue;
if(!vis[a[i]])vis[a[i]]=;
else {puts("-1");return ;}
}
for(int i=;i<=n;i++)if(!vis[i])stk[++top]=i;
for(int i=;i<=n;i++){
if(a[i])printf("%d ",a[i]);
else printf("%d ",stk[top--]);
}
}

C:

四个方向搞一个前缀和  注意大于小于  加一减一   算没算上自己 等等细节

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
const int N=;
int d,n,m,suml[N],sumr[N],sumu[N],sumd[N],cntl,cntr,cntu,cntd;
struct Node{
int x1,y1,x2,y2;Node(){}
Node(int X1,int Y1,int X2,int Y2){x1=X1,y1=Y1,x2=X2,y2=Y2;}
}node[N];
int main(){
scanf("%d%d%d",&d,&n,&m);
for(int i=;i<=d;i++){
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2),node[i]=Node(x1,y1,x2,y2);
}scanf("%d%d%d%d",&cntl,&cntr,&cntu,&cntd);
for(int i=;i<=d;i++)
suml[min(node[i].x1,node[i].x2)]++,sumr[max(node[i].x1,node[i].x2)]++,
sumu[min(node[i].y1,node[i].y2)]++,sumd[max(node[i].y1,node[i].y2)]++;
for(int i=;i<=n;i++)suml[i]+=suml[i-];
for(int i=n;~i;i--)sumr[i]+=sumr[i+];
for(int i=;i<=m;i++)sumu[i]+=sumu[i-];
for(int i=m;~i;i--)sumd[i]+=sumd[i+];
for(int i=;i<=d;i++){
int a=suml[max(node[i].x1,node[i].x2)-],b=sumr[min(node[i].x1,node[i].x2)+],
c=sumu[max(node[i].y1,node[i].y2)-],d=sumd[min(node[i].y1,node[i].y2)+];
node[i].x1!=node[i].x2?a--,b--:;
node[i].y1!=node[i].y2?c--,d--:;
if(a==cntl&&b==cntr&&c==cntu&&d==cntd){printf("%d\n",i);exit();}
}puts("-1");
}

D:

筛一次 就好了   最后判一下出现的所有数

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
int n,a,c[],num[],vis[];
int main(){
scanf("%d%d",&n,&a);
for(int i=;i<=n;i++){
scanf("%d",&c[i]);
if(c[i]!=a&&num[c[i]]<num[a])vis[c[i]]=;
num[c[i]]++;
if(c[i]!=a&&num[c[i]]<num[a])vis[c[i]]=;
}
if(!num[a]){printf("%d\n",(a+)%);return ;}
for(int i=;i<=n;i++){
if(c[i]!=a&&num[c[i]]<num[a])vis[c[i]]=;
if(c[i]!=a&&!vis[c[i]]){printf("%d\n",c[i]);return ;}
}
puts("-1");
}

E:

分解质因数 two pointers一发

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
int n,k,a[],b[],cnt,p[],tmp;
void insert(int x,int y){
for(int i=;i<=cnt;i++)while(x%a[i]==){
if(!b[i]&&y==)tmp++;
if(y==-&&b[i]==)tmp--;
b[i]+=y,x/=a[i];
}
}
int main(){
scanf("%d%d",&n,&k);
int now=k;
for(int i=;i*i<=k;i++)if(now%i==){
a[++cnt]=i;
while(now%i==)now/=i,b[cnt]++;
}
if(now>)a[++cnt]=now,b[cnt]=;tmp=cnt;
for(int i=;i<=n;i++)scanf("%d",&p[i]);
long long ans=;
for(int i=,j=;i<=n;i++){
for(;j<=i;j++)insert(p[j],-);
for(;j<=n&&tmp;j++)insert(p[j],-);
if(!tmp)ans+=n-j+;
insert(p[i],);
}printf("%I64d\n",ans);
}

F:

三分答案  特判一下前几个数  后面的肯定是   一坨 加一个链

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
#define int long long
int cases,xx;
int f(int x){return x*(x-)/;}
signed main(){
scanf("%I64d",&cases);
while(cases--){
scanf("%I64d",&xx);
if(xx==){puts("");continue;}
int l=,r=xx,ans=;
while(l<r){
int mid=(l+r)/,edges=mid*(mid-)/,bridge=xx-mid;
if(bridge>edges)l=mid+,ans=max(ans,edges+bridge);
else r=mid,ans=max(ans,*bridge);
}printf("%I64d\n",ans);
}
}

G:

费用流

拆点建图

i->i+n 连流量1 费用-1  流量ing 费用0

记录上一个%7=i的数是谁

记录每个数最后出现的位置

    for(int i=1;i<=n;i++)add(0,i,0,inf),add(i+n,T,0,inf),add(i,i+n,-1,1),add(i,i+n,0,inf);
for(int i=1;i<=n;i++){
if(pos[a[i]-1])add(pos[a[i]-1]+n,i,0,inf);
if(pos[a[i]+1])add(pos[a[i]+1]+n,i,0,inf);
if(lst[a[i]%7])add(lst[a[i]%7]+n,i,0,inf);
pos[a[i]]=i,lst[a[i]%7]=i;
}add(S=n*2+2,0,0,4);
最后限制起点流出的流量是4
//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
#define mem(x,y) memset(x,y,sizeof(x))
const int N=,M=*,inf=0x3f3f3f3f;
int first[N],nxt[M],v[M],cost[M],edge[M],tot,n,a[N],S,T,vis[N],dis[N],with[N],minn[N],pos[M],lst[M],ans;
void Add(int x,int y,int C,int E){cost[tot]=C,edge[tot]=E,v[tot]=y,nxt[tot]=first[x],first[x]=tot++;}
void add(int x,int y,int C,int E){Add(x,y,C,E),Add(y,x,-C,);}
bool tell(){
queue<int>q;q.push(S);
mem(dis,0x3f),mem(with,),mem(minn,0x3f),mem(vis,);dis[S]=;
while(!q.empty()){
int t=q.front();q.pop();vis[t]=;
for(int i=first[t];~i;i=nxt[i])
if(dis[v[i]]>dis[t]+cost[i]&&edge[i]){
dis[v[i]]=dis[t]+cost[i],minn[v[i]]=min(minn[t],edge[i]),with[v[i]]=i;
if(!vis[v[i]])vis[v[i]]=,q.push(v[i]);
}
}return dis[T]<inf;
}
int zeng(){
for(int i=T;i!=S;i=v[with[i]^])
edge[with[i]]-=minn[T],edge[with[i]^]+=minn[T];
return minn[T]*dis[T];
}
int main(){
memset(first,-,sizeof(first));
scanf("%d",&n),T=*n+;
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=n;i++)add(S,i,,inf),add(i+n,T,,inf),add(i,i+n,-,),add(i,i+n,,inf);
for(int i=;i<=n;i++){
if(pos[a[i]-])add(pos[a[i]-]+n,i,,inf);
if(pos[a[i]+])add(pos[a[i]+]+n,i,,inf);
if(lst[a[i]%])add(lst[a[i]%]+n,i,,inf);
pos[a[i]]=i,lst[a[i]%]=i;
}add(S=n*+,,,);
while(tell())ans+=zeng();
printf("%d\n",-ans);
}

Educational Codeforces Round 24 题解的更多相关文章

  1. Educational Codeforces Round 24 A 水 B stl C 暴力 D stl模拟 E 二分

    A. Diplomas and Certificates time limit per test 1 second memory limit per test 256 megabytes input ...

  2. codeforces Educational Codeforces Round 24 (A~F)

    题目链接:http://codeforces.com/contest/818 A. Diplomas and Certificates 题解:水题 #include <iostream> ...

  3. Educational Codeforces Round 19 题解【ABCDE】

    A. k-Factorization 题意:给你一个n,问你这个数能否分割成k个大于1的数的乘积. 题解:因为n的取值范围很小,所以感觉dfs应该不会有很多种可能-- #include<bits ...

  4. Educational Codeforces Round 24 CF 818 A-G 补题

    6月快要结束了 期末也过去大半了 马上就是大三狗了 取消了小学期后20周的学期真心长, 看着各种北方的学校都放假嗨皮了,我们这个在北回归线的学校,还在忍受酷暑. 过年的时候下定决心要拿块ACM的牌子, ...

  5. Educational Codeforces Round 24 E

    Vova again tries to play some computer card game. The rules of deck creation in this game are simple ...

  6. Educational Codeforces Round 55 题解

    题解 CF1082A [Vasya and Book] 史上最难A题,没有之一 从题意可以看出,翻到目标页只有三种办法 先从\(x\)到\(1\),再从\(1\)到\(y\) 先从\(x\)到\(n\ ...

  7. Codeforces Educational Codeforces Round 54 题解

    题目链接:https://codeforc.es/contest/1076 A. Minimizing the String 题意:给出一个字符串,最多删掉一个字母,输出操作后字典序最小的字符串. 题 ...

  8. Codeforces Educational Codeforces Round 57 题解

    传送门 Div 2的比赛,前四题还有那么多人过,应该是SB题,就不讲了. 这场比赛一堆计数题,很舒服.(虽然我没打) E. The Top Scorer 其实这题也不难,不知道为什么这么少人过. 考虑 ...

  9. Educational Codeforces Round 57题解

    A.Find Divisible 沙比题 显然l和2*l可以直接满足条件. 代码 #include<iostream> #include<cctype> #include< ...

随机推荐

  1. 简述Centos系统启动流程

    1. Centos5 POST开机自检 运行CMOS中的BIOS程序,加载第一个启动磁盘的Bootloader 由Bootloader读取kernel 通过挂载临时根目录initramfs加载核心模块 ...

  2. CCF201609-1 最大波动 java (100分)

    试题编号: 201609-1 试题名称: 最大波动 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明正在利用股票的波动程度来研究股票.小明拿到了一只股票每天收盘时的价格,他 ...

  3. python re模块与正则

    1. re模块 1.1 转义符 正则表达式中的转义符在python的字符串中也刚好有转移的作用,但是正则表达式中的转义符和字符串中的转义符并没关系,且还容易有冲突. 为了避免这种冲突,我们所有的正则都 ...

  4. BZOJ 4976 [Lydsy1708月赛]宝石镶嵌

    [题解] 我们设总共有m个二进制位出现过1,那么如果n-k≥m,显然所有的1都可以出现,那么答案就是把所有的数或起来. 如果n-k<m,那么因为k不超过100,ai不超过1e5,所以n不超过11 ...

  5. UVALive 6510 Stickers

    Stickers Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Original ...

  6. Navicat使用技巧

    1.有时按快捷键Ctrl+F搜某条数据的时候搜不到,但是能用sql查出来,这是怎么回事? Ctrl+F只能搜本页数据,不在本页的数据搜不到,navicat每页只显示1000条数据.在数据多的时候nav ...

  7. hdu 5023 线段树延迟更新+状态压缩

    /* 线段树延迟更新+状态压缩 */ #include<stdio.h> #define N 1100000 struct node { int x,y,yanchi,sum; }a[N* ...

  8. HDU——1133 Buy the Ticket

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  9. Unix stat

    Linux 下有stat命令,可以非常方便的得到一个文件的inode等信息.但是今天在Solaris下使用stat居然没有这个命令.不过没关系,我们可以自己写这个命令,比如: #include < ...

  10. Wireshark 抓包遇到 you don’t have permission to capture on that device mac 错误的解决方案

    Wireshark 抓包遇到 you don’t have permission to capture on that device mac 错误的解决方案 上次有篇博客讲了如何利用wireshark ...