2018 ACM 网络选拔赛 南京赛区
A. An Olympian Math Problem
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e9
#define pi 3.1415926536
#define nl 2.7182818284
const ll mod=1e9+;//
const int maxn=1e5+; int main()
{
int t;
ll n;
scanf("%d",&t);
while (t--)
{
scanf("%lld",&n);
printf("%lld\n",n-);
}
return ;
}
B. The writing on the wall
与 https://leetcode.com/problems/maximal-rectangle/description/ 这道题很像
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=1e9+;
const int maxn=1e5+;
const int maxm=1e2+; int a[maxn][maxm],c[maxn][maxm];
int qx[maxm],qy[maxm]; int main()
{
ll sum=;
int t,T,n,m,g,x,y,i,j,k;
bool vis;
scanf("%d",&t);
for (T=;T<=t;T++)
{
memset(a,,sizeof(a));
scanf("%d%d%d",&n,&m,&g);
while (g--)
{
scanf("%d%d",&x,&y);
a[x][y]=;
}
for (j=;j<=m;j++)
for (i=;i<=n;i++)
c[i][j]=(a[i][j]==)?:c[i-][j]+;
sum=;
for (i=;i<=n;i++)
{
///以a[i][j]作为右下方
g=;
for (j=;j<=m;j++)
{
if (g== || c[i][j]>qx[g])
vis=;
else
vis=;
sum+=c[i][j];
qy[g+]=j; while (qx[g]>c[i][j])
sum+=1ll*(qy[g+]-qy[g])*c[i][j],g--;
k=g;
while (k)
sum+=1ll*(qy[k+]-qy[k])*qx[k],k--;
if (g== || qx[g]!=c[i][j])
g++;
if (vis)
qy[g]=j;
qx[g]=c[i][j];
}
}
printf("Case #%d: %lld\n",T,sum);
}
return ;
}
/*
100
3 3 3
1 1
1 2
2 1 3 3 4
1 1
1 2
2 1
2 2 2 3 0 100000 100 0
*/
C. GDY
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e9
#define pi 3.1415926536
#define nl 2.7182818284
const ll mod=1e9+;//
const int maxn=2e2+;
const int maxm=2e4; int s[maxm],a[maxn][maxm],g[maxn];
int value[]={,,,,,,,,,,,,,}; int cmp(int x,int y)
{
return value[x]>value[y];
} int main()
{
int t,T,n,m,num,i,j,sum;
int x,y,z;
scanf("%d",&t);
for (T=;T<=t;T++)
{
memset(g,,sizeof(g)); scanf("%d%d",&n,&m);
for (i=;i<m;i++)
scanf("%d",&s[i]);
num=;
for (i=;i<n;i++)
{
for (j=;j<;j++)
{
if (num==m)
break;
a[i][j]=s[num++];
}
sort(a[i],a[i]+j,cmp);
g[i]=j;
} z=a[][g[]-];//previous number
g[]--;
y=;//has y persons
x=;//pos
while ()
{
for (i=g[x]-;i>=;i--)
if (value[z]+==value[a[x][i]] || (a[x][i]== && z!=))
break; if (i!=-)
{
z=a[x][i];
a[x][i]=;
sort(a[x],a[x]+g[x],cmp);
g[x]--;
if (g[x]==)
break;
y=;
}
else if (y!=n-)
y++;
else
{
x=(x+)%n;
for (i=x;;i=(i+)%n)
{
if (num==m)
break;
else
{
a[i][g[i]++]=s[num++];
sort(a[i],a[i]+g[i],cmp);
}
if (i==(x-+n)%n)
break;
} z=a[x][g[x]-];
g[x]--;
if (g[x]==)
break;
y=;
} x=(x+)%n;
}
printf("Case #%d:\n",T);
for (i=;i<n;i++)
if (i==x)
printf("Winner\n");
else
{
sum=;
for (j=;j<g[i];j++)
sum+=a[i][j];
printf("%d\n",sum);
}
}
return ;
}
/*
10
2 6
3 5 7 9 11 4 3 20
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 3 19
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 3 20
3 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 10
3 4 5 6 7 2 3 4 5 6 3 15
3 4 5 6 7 12 12 12 12 12 13 13 13 13 13 3 11
1 2 3 4 5 6 7 8 9 10 11 3 13
1 2 3 4 5 6 7 8 9 10 11 12 13 1
3 17
1 2 3 4 5 6 7 8 9 10 11 12 13 12 11 10 9 */
E. AC Challenge
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf -1e18
#define pi 3.1415926536
#define nl 2.7182818284
const ll mod=1e9+;//
const int maxn=1e5+; ll f[<<]; struct node
{
ll value;
int pos,t;
}; struct cmp1
{
bool operator() (node a,node b)
{
return a.value>b.value;
}
}; //priority_queue<node>st;
priority_queue<node,vector<node>,cmp1>st;
int er[],a[],b[],v[]; int main()
{
int n,m,s,i,j,value,pos,t;
ll r=,rr;
for (i=;i<;i++)
er[i]=(<<i); scanf("%d",&n);
for (i=;i<(<<n);i++)
f[i]=inf; for (i=;i<n;i++)
{
scanf("%d%d%d",&a[i],&b[i],&m);
v[i]=;
while (m--)
{
scanf("%d",&s);
v[i]+=(er[s-]);
}
if (v[i]==)
{
f[er[i]]=a[i]+b[i];
st.push({a[i]+b[i],er[i],});
r=max(r,(ll)a[i]+b[i]);
}
} while (!st.empty())
{
value=st.top().value;
pos=st.top().pos;
t=st.top().t;
st.pop();
for (i=;i<n;i++)
if ((pos & er[i])== && (pos & v[i])==v[i] && value+1ll*t*a[i]+b[i]>f[pos|er[i]])
{
rr=value+1ll*t*a[i]+b[i];
f[pos|er[i]]=rr;
r=max(r,rr);
st.push({rr,pos|er[i],t+});
}
}
printf("%lld",r);
return ;
}
/*
3
1 2 0
1 5 0
8 1 0
*/
G. Lpl and Energy-saving Lamps
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e18
#define pi 3.1415926536
#define nl 2.7182818284
const ll mod=1e9+;//
const int maxn=1e5+; struct node
{
int x,y;
}f[maxn],r[maxn]; int tag[maxn<<],a[maxn],x,y; int cmp(node a,node b)
{
return a.x<b.x;
} void build(int index,int l,int r)
{
if (l==r)
scanf("%d",&tag[index]);
else
{
int m=(l+r)>>;
build(index<<,l,m);
build(index<<|,m+,r);
tag[index]=min(tag[index<<],tag[index<<|]);
}
} int query(int index,int l,int r,int v)
{
if (l==r)
{
if (tag[index]>v)
return ; x++;
y-=tag[index];
tag[index]=inf;
return l;
}
else
{
int m=(l+r)>>,z;
if (tag[index<<]<=v)
z=query(index<<,l,m,v); else
z=query(index<<|,m+,r,v);
tag[index]=min(tag[index<<],tag[index<<|]);
return z;
}
} int main()
{
int n,m,q,Q,d,index,i,j;
scanf("%d%d",&n,&m);
build(,,n); scanf("%d",&q);
for (Q=;Q<=q;Q++)
{
scanf("%d",&d);
f[Q].x=d;
f[Q].y=Q;
}
sort(f+,f+q+,cmp); index=;
x=;
y=;
for (i=;i<=f[q].x;i++)
{
y+=m;
j=;
while (j)
j=query(,,n,y); while (f[index].x==i)
{
r[f[index].y]={x,y};
index++;
}
} for (i=;i<=q;i++)
printf("%d %d\n",r[i].x,r[i].y);
return ;
}
J. Sum
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e9
#define pi 3.1415926536
#define nl 2.7182818284
const ll mod=1e9+;//
const int maxn=2e7+; int zhi[maxn],f[maxn];
bool vis[maxn],v[maxn]; int main()
{
int t,i,j,k,x=,y=,value=2e7;
ll n,sum;
memset(vis,,sizeof(vis));
memset(v,,sizeof(v));
for (i=;i<=value;i++)
{
if (!vis[i])
{
x++;
zhi[x]=i;
}
for (j=;j<=x;j++)
{
k=i*zhi[j];
if (k>value)
break;
vis[k]=;
v[k]=v[i];
if (i%zhi[j]==)
{
v[k]=;
break;
}
}
}
for (i=;i<=value;i++)
if (!v[i])
{
y++;
f[y]=i;
} // for (i=1;i<=100;i++)
// printf("%d ",f[i]); scanf("%d",&t);
f[]=;
while (t--)
{
scanf("%lld",&n);
sum=;
j=y;
for (i=;i<=y;i++)
{
while (1ll*f[i]*f[j]>n)
j--;
sum+=j;
}
printf("%lld\n",sum);
}
return ;
}
L. Magical Girl Haze
/*
图问题:
spfa容易被卡时间复杂度 而dijkstra是贪心,不会被卡
*/
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <time.h>
#include <string>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <ext/rope>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define minv 1e-6
#define inf 1e18
#define pi 3.1415926536
#define nl 2.7182818284
const ll mod=1e9+;//
const int maxn=1e5+; struct rec
{
int d,len;
rec *to;
}*e[maxn]; struct node
{
ll dist;
int k,d;
}; struct cmp1
{
bool operator() (node a,node b)
{
if (a.dist==b.dist)
return a.k>b.k;
else
return a.dist>b.dist;
}
}; priority_queue<node,vector<node>,cmp1>st; ll f[maxn][]; int main()
{
rec *p;
int t,n,m,k,i,j,d,kk,dd,x,y,z;
ll dist,r;
scanf("%d",&t);
while (t--)
{
scanf("%d%d%d",&n,&m,&k);
for (i=;i<=n;i++)
e[i]=NULL;
while (m--)
{
scanf("%d%d%d",&x,&y,&z);
p=(rec*) malloc (sizeof(rec));
p->d=y;
p->len=z;
p->to=e[x];
e[x]=p;
}
for (i=;i<=n;i++)
for (j=;j<=k;j++)
f[i][j]=inf;
for (j=;j<=k;j++)
{
f[][j]=;
st.push({,j,});
}
//f[i][j]作为一个状态,100000*10
while (!st.empty())
{
dist=st.top().dist;
d=st.top().d;
kk=st.top().k;
st.pop();
p=e[d];
while (p)
{
dd=p->d;
if (f[dd][kk]>dist+p->len)
{
f[dd][kk]=dist+p->len;
st.push({f[dd][kk],kk,dd});
}
if (kk!=k && f[dd][kk+]>dist)
{
f[dd][kk+]=dist;
st.push({f[dd][kk+],kk+,dd});
}
p=p->to;
}
}
r=inf;
for (j=;j<=k;j++)
r=min(r,f[n][j]);
printf("%lld\n",r);
}
return ;
}
2018 ACM 网络选拔赛 南京赛区的更多相关文章
- 2018 ACM 网络选拔赛 青岛赛区
一些题目的代码被网站吞了…… Problem B. Red Black Tree http://acm.zju.edu.cn/onlinejudge/searchProblem.do?contestI ...
- 2018 ACM 网络选拔赛 北京赛区
A Saving Tang Monk II #include <bits/stdc++.h> using namespace std; ; struct node { int x,y,z, ...
- 2018 ACM 网络选拔赛 徐州赛区
A. Hard to prepare #include <cstdio> #include <cstdlib> #include <cmath> #include ...
- 2018 ACM 网络选拔赛 焦作赛区
A. Magic Mirror #include <cstdio> #include <cstdlib> #include <cmath> #include < ...
- 2018 ACM 网络选拔赛 沈阳赛区
B. Call of Accepted #include <cstdio> #include <cstdlib> #include <cmath> #include ...
- ACM-ICPC 2018 南京赛区网络预赛 J.sum
A square-free integer is an integer which is indivisible by any square number except 11. For example ...
- ACM-ICPC 2018 南京赛区网络预赛 E题
ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest wi ...
- ACM-ICPC 2018 南京赛区网络预赛B
题目链接:https://nanti.jisuanke.com/t/30991 Feeling hungry, a cute hamster decides to order some take-aw ...
- 计蒜客 30999.Sum-筛无平方因数的数 (ACM-ICPC 2018 南京赛区网络预赛 J)
J. Sum 26.87% 1000ms 512000K A square-free integer is an integer which is indivisible by any squar ...
随机推荐
- Nginx 403 Forbidden 解决方案 史上最靠谱
原因 1. SELinux为开启状态(enabled) 查看SELinux的状态 sestatus 如果不是 disables , 需要 vi /etc/selinux/config 将以前的 SEL ...
- Onezero团队第三次站立会议随感
>首先这是一个关于Android的小应用APP(记账本) >在Java基础薄弱的基础上尝试Android开发,让我感觉力不从心. >说实话本迭代周在程序设计,确实让我头疼,不知道怎么 ...
- 思甜雅---关于qq的NABCD的模型分析
个人连接:http://www.cnblogs.com/xiaoliulang/ 关于QQ的NABCD模型 N--Need 随着电脑的普及,人们在网络上进行交流的时间越来越多,由于现有的交流工具还不是 ...
- svn 使用教程
一.什么是SVN SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS. 二.SVN的下载安装 下载地址:http ...
- SQLSERVER 导出表数据为insert 语句
1. 打开sqlserver的查询分析器,在图示的位置右键以及处理 选择生成对象 重要的是 选择 脚本编写选项 很快就能完成 4 转出的SQL文件就为 5. 但是记得 曾经出过问题, 字符集 还有 ...
- Windows 版本下 Oracle12.1.0.2 升级Oracle12.2.0.1的步骤
oracle12.1.0.1 2013年发布的产品 2014年左右发布12.1.0.2 2016年底发布了 oracle12.2.0.1 经常有人会安装了最早的oracle版本,然后需要升级到最新的o ...
- C#實現XML的增刪查改
命名空間:using System.Xml; 1.查找某個節點是否存在: private XmlDocument xmldoc; private string mod="1"; p ...
- Java代码redis基础操作
maven依赖包: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis< ...
- java 里面的 native 方法
第一篇: 今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解. 一. 什么是Native Method 简单地讲,一个Native Meth ...
- Linux系统——程序员跳槽必备
相信在看这篇文章的你,曾经或者现在是否跳槽呢,在北上广一线城市,你是否还在挣着那可怜巴巴的工资,过着拮据生活呢?但是自己想跳槽,却没有一技之长或者是自己的技术找工作太难了,那么我建议你学习下linux ...