2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest (9/12)
$$2015-2016\ ACM-ICPC,\ NEERC,\ Northern\ Subregional\ Contest$$
\(A.Alex\ Origami\ Squares\)
签到
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
freopen("alex.in","r",stdin);
cin >> a >> b;
freopen("alex.out","w",stdout);
double res = max(max(min(a/3.0,b/1.0),min(a/1.0,b/3.0)),min(a/2.0,b/2.0));
cout << res << endl;
return 0;
}
\(B.Black\ and\ White\)
构造,把多的框在少的里面即可
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 1e5+7;
int n,m,len;
char tile[MAXN][5];
int main(){
#ifdef ONLINE_JUDGE
freopen("black.in","r",stdin);
#endif
____();
cin >> n >> m;
#ifdef ONLINE_JUDGE
freopen("black.out","w",stdout);
#endif
if(m==0){
cout << 1 << ' ' << 1 << endl << '@' << endl;
return 0;
}
if(n==0){
cout << 1 << ' ' << 1 << endl << '.' << endl;
return 0;
}
char x='@',y='.';
if(n<m){
swap(n,m);
swap(x,y);
}
len = 1;
if(n>m){
tile[len][1] = tile[len][2] = tile[len][3] = y;
len++, m--;
}
while(n>m){
tile[len][2] = x;
tile[len][1] = tile[len][3] = y;
len++, n--;
tile[len][1] = tile[len][2] = tile[len][3] = y;
len++;
}
while(n){
tile[len][1] = tile[len][2] = tile[len][3] = x;
len++, n--;
tile[len][1] = tile[len][2] = tile[len][3] = y;
len++;
}
if(tile[len][1]=='\0') len--;
cout << len << ' ' << 3 << endl;
for(int i = 1; i <= len; i++) cout << (tile[i]+1) << endl;
return 0;
}
\(C.Concatenation\)
答案就是总数量-右串从\(1\)到\(lenr-1\)各个字符在左串\(2~lenl\)之间出现的次数
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 3e5+7;
char s[MAXN],t[MAXN];
int len1,len2;
int main(){
#ifdef ONLINE_JUDGE
freopen("concatenation.in","r",stdin);
#endif
scanf("%s %s",s+1,t+1);
#ifdef ONLINE_JUDGE
freopen("concatenation.out","w",stdout);
#endif
len1 = strlen(s+1);
len2 = strlen(t+1);
int_fast64_t res = len1*(int_fast64_t)len2;
map<char,int> mp;
for(int i = 2; i <= len1; i++) mp[s[i]]++;
for(int i = 1; i < len2; i++) res -= mp[t[i]];
cout << res << endl;
return 0;
}
\(D.Distribution\ in\ Metagonia\)
考虑构造时先把质因子\(2\),\(3\)提出来,然后得到一个奇数,把奇数拆分为\(3^k·p\),继续对\(p\)拆分直到\(p\)的因子只含\(2\)和\(3\)为止
递归构造即可
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
using LL = int_fast64_t;
int t;
LL n[1111];
void gao(LL m, LL mul, vector<LL> &vec){
if(m==1){
vec.emplace_back(mul);
return;
}
if(m%3!=0&&m%2!=0){
LL tp = 1;
while(tp*3<=m) tp *= 3;
gao(tp,mul,vec);
gao(m-tp,mul,vec);
return;
}
LL sum = 1;
while(m%2==0){
sum *= 2;
m >>= 1;
}
while(m%3==0){
sum *= 3;
m /= 3;
}
gao(m,sum*mul,vec);
}
void solve(LL m){
vector<LL> vec;
gao(m,1,vec);
cout << vec.size() << endl;
for(LL x : vec) cout << x << ' '; cout << endl;
}
int main(){
#ifdef ONLINE_JUDGE
freopen("distribution.in","r",stdin);
freopen("distribution.out","w",stdout);
#endif
____();
cin >> t;
for(int i = 1; i <= t; i++) cin >> n[i];
for(int i = 1; i <= t; i++) solve(n[i]);
return 0;
}
\(E.Easy\ Arithmetic\)
打记号标记前导零、上一位是否是符号、当前正负值然后判断即可
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 3333;
char s[MAXN],tar[MAXN];
int main(){
#ifdef ONLINE_JUDGE
freopen("easy.in","r",stdin);
#endif
____();
cin >> (s+1);
int len = strlen(s+1);
#ifdef ONLINE_JUDGE
freopen("easy.out","w",stdout);
#endif
int c = 1, ptr = 1;
bool tag = true, lead = true, op = true;
while(ptr<=len){
if(!isdigit(s[ptr])){
if(s[ptr]=='-') tag = false;
else if(s[ptr]=='+') tag = true;
tar[c++] = s[ptr];
op = true;
}
else{
if(op){
op = false;
tar[c++] = s[ptr];
lead = (s[ptr]=='0');
}
else{
if(!tag){
tar[c++] = '+';
tag = true;
tar[c++] = s[ptr];
lead = (s[ptr]=='0');
}
else{
if(lead){
tar[c++] = '+';
lead = (s[ptr]=='0');
tar[c++] = s[ptr];
}
else tar[c++] = s[ptr];
}
}
}
ptr++;
}
cout << (tar+1) << endl;
return 0;
}
\(F.Fygon\)
\(G.Graph\)
友情链接
大顶堆小顶堆维护,做法有点妙
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 1e5+7;
int n,m,k,pre,ord[MAXN],cur,deg[MAXN];
vector<int> G[MAXN];
set<int> S;
set<int,greater<int>> done;
vector<pair<int,int>> edge;
void toposort(int u){
ord[++cur] = u;
pre = u;
for(int v : G[u]) if(--deg[v]==0) S.insert(v);
}
int main(){
#ifdef ONLINE_JUDGE
freopen("graph.in","r",stdin);
freopen("graph.out","w",stdout);
#endif
scanf("%d %d %d",&n,&m,&k);
for(int i = 1; i <= m; i++){
int u, v;
scanf("%d %d",&u,&v);
G[u].emplace_back(v);
deg[v]++;
}
for(int i = 1; i <= n; i++) if(deg[i]==0) S.insert(i);
while(cur<n){
if(S.empty()){ //自己安排下一个节点顺序
int u = *done.begin();
done.erase(u);
edge.emplace_back(make_pair(pre,u));
toposort(u);
}
else if(!k||(S.size()==1&&(done.empty()||*S.begin()>*done.begin()))){
int u = *S.begin();
S.erase(u);
toposort(u);
}
else{
k--;
done.insert(*S.begin());
S.erase(S.begin());
}
}
for(int i = 1; i <= n; i++) printf("%d ",ord[i]); puts("");
printf("%d\n",edge.size());
for(auto p : edge) printf("%d %d\n",p.first,p.second);
return 0;
}
\(H.Hash\ Code\ Hacker\)
每次从后一位向前进一位,后一位\(y\)变成\(Z\),前一位的\(x\)变成\(y\),重复操作即可
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 1111;
char s[MAXN];
int k;
int main(){
#ifdef ONLINE_JUDGE
freopen("hash.in","r",stdin);
#endif
cin >> k;
#ifdef ONLINE_JUDGE
freopen("hash.out","w",stdout);
#endif
for(int i = 1; i <= 999; i++) s[i] = 'x';
s[1000] = 'y';
cout << (s+1) << endl;
for(int i = 1; i < k; i++){
s[1000+1-i] = 'Z';
s[1000-i] = 'y';
cout << (s+1) << endl;
}
return 0;
}
\(I.Insider's\ Information\)
\(J.Journey\ to\ the\ "The World's Start"\)
二分答案之后线段树维护DP求最小耗时
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 1e5+7;
using LL = int_fast64_t;
const LL INF = 0x3f3f3f3f3f3f3f3f;
int n,t,p[MAXN],cost[MAXN];
struct SegmentTree{
LL minn[MAXN<<2];
int l[MAXN<<2],r[MAXN<<2];
#define ls(rt) ((rt) << 1)
#define rs(rt) ((rt) << 1 | 1)
void pushup(int rt){ minn[rt] = min(minn[ls(rt)],minn[rs(rt)]); }
void build(int L, int R, int rt){
l[rt] = L, r[rt] = R;
if(L+1==R) return;
int mid = (L+R) >> 1;
build(L,mid,ls(rt)); build(mid,R,rs(rt));
pushup(rt);
}
void update(int pos, int rt, LL x){
if(l[rt]+1==r[rt]) {
minn[rt] = x;
return;
}
int mid = (l[rt]+r[rt]) >> 1;
if(pos<mid) update(pos,ls(rt),x);
else update(pos,rs(rt),x);
pushup(rt);
}
LL qmin(int L, int R, int rt){
if(l[rt]>=R||L>=r[rt]) return INF;
if(L<=l[rt] && r[rt]<=R) return minn[rt];
return min(qmin(L,R,ls(rt)),qmin(L,R,rs(rt)));
}
}ST;
bool check(int mid){
ST.update(1,1,-1);
for(int i = 2; i <= n; i++) ST.update(i,1,ST.qmin(max(1,i-mid),i,1)+cost[i]);
return ST.qmin(n,n+1,1)+n<=t;
}
int solve(){
int l = 1, r = n-1;
ST.build(1,n+1,1);
while(l<=r){
int mid = (l+r)>>1;
if(check(mid)) r = mid - 1;
else l = mid + 1;
}
return p[l];
}
int main(){
#ifdef ONLINE_JUDGE
freopen("journey.in","r",stdin);
freopen("journey.out","w",stdout);
#endif
scanf("%d %d",&n,&t);
for(int i = 1; i < n; i++) scanf("%d",&p[i]);
for(int i = n-2; i >= 1; i--) p[i] = min(p[i],p[i+1]);
for(int i = 2; i < n; i++) scanf("%d",&cost[i]);
printf("%d\n",solve());
return 0;
}
\(K.Kingdom\ Trip\)
\(L.Lucky\ Chances\)
签到,暴力
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 111;
const int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int n,m,A[MAXN][MAXN];
int main(){
#ifdef ONLINE_JUDGE
freopen("lucky.in","r",stdin);
#endif
____();
cin >> n >> m;
for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) cin >> A[i][j];
#ifdef ONLINE_JUDGE
freopen("lucky.out","w",stdout);
#endif
int res = 0;
for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++){
for(int d = 0; d < 4; d++){
bool ok = true;
for(int x = i+dir[d][0], y = j + dir[d][1]; x>0&&x<=n&&y>0&&y<=m; x+=dir[d][0],y+=dir[d][1]) if(A[x][y]>=A[i][j]) ok = false;
res+=ok;
}
}
cout << res << endl;
return 0;
}
2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest (9/12)的更多相关文章
- 2018-2019 ICPC, NEERC, Southern Subregional Contest
目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...
- Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest
2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...
- 【2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D】---暑假三校训练
2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D Problem D. Distribution in Metagonia Input ...
- 模拟赛小结:2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest
2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest 2019年10月11日 15:35-20:35(Solved 8,Penalty 675 ...
- ACM ICPC 2016–2017, NEERC, Northern Subregional Contest Problem J. Java2016
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:2s 空间限制:256MB 题目大意: 给定一个数字c 用 " ...
- 2016 NEERC, Northern Subregional Contest G.Gangsters in Central City(LCA)
G.Gangsters in Central City 题意:一棵树,节点1为根,是水源.水顺着边流至叶子.该树的每个叶子上有房子.有q个询问,一种为房子u被强盗入侵,另一种为强盗撤离房子u.对于每个 ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror) Solution
从这里开始 题目列表 瞎扯 Problem A Find a Number Problem B Berkomnadzor Problem C Cloud Computing Problem D Gar ...
- 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest Problem F. Format
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:1s 空间限制:512MB 题目大意: 给定一个字符串,使用%[...] ...
- 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest Problem I. Integral Polygons
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:2s 空间限制:256MB 题目大意: 给定一个凸多边形,有一种连接两个 ...
随机推荐
- Openstack Ocata 负载均衡安装(二)
Openstack OCATA 负载节点(二) 安装haproxy: apt install haproxy 配置haproxy: vim /etc/haproxy/haproxy.cfg globa ...
- Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT 故障排除
系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...
- 奇技淫巧,还是正统功夫? - Python推导式最全用法
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- Kubernetes 开船记-脚踏两只船:用 master 服务器镜像克隆出新集群
自从2020年2月23日 园子全站登船 之后,我们一边感叹"不上船不知道,一上船吓一跳" -- kubernetes 比 docker swarm 强大太多,一边有一个杞人忧天的担 ...
- React 入门-redux 和 react-redux
React 将页面元素拆分成组件,通过组装展示数据.组件又有无状态和有状态之分,所谓状态,可以简单的认为是组件要展示的数据.React 有个特性或者说是限制单向数据流,组件的状态数据只能在组件内部修改 ...
- SourceGenerator入门指北
SourceGenerator介绍 SourceGenerator于2020年4月29日在微软的.net blog首次介绍,大概说的是开发者编可以写分析器,在项目代码编译时,分析器分析项目既有的静态代 ...
- linux静态库
库文件可以理解为别人写好的现成的代码,但是看不见源码,只提供程序入口.库又分为动态库和静态库,静态库是在编译的时候将库编译进可执行程序中,运行时不再依赖库文件,而动态库是在运行时加载,运行时需要依赖库 ...
- java虚拟机入门(二)-探索内存世界
上节简单介绍了一下jvm的内存布局以及简单概念,那么对于虚拟机来说,它是怎么一步步的让我们能执行方法的呢: 1.首先,jvm启动时,跟个小领导一样会根据配置参数(没有配置的话jvm会有默认值)向大领导 ...
- Vue基础之生命周期函数[残缺版]!
Vue基础之生命周期函数[残缺版]! 为什么说是残缺版呢?! 因为有一些周期函数我并没有学到!所以是残缺版! 01 beforeCreate //在实例初始化之后,数据观测 (data observe ...
- Linux sudo权限提升漏洞整改方法
一.漏洞概述 1月26日,Sudo发布安全通告,修复了一个类Unix操作系统在命令参数中转义反斜杠时存在基于堆的缓冲区溢出漏洞.当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命 ...