APIO2018练习赛伪题解
传送门:https://pcms.university.innopolis.ru/statements/org/apio/2018/practice/statements.pdf
主要就在于后面三道构造题,感觉开阔了眼界。
A:
A + B problem,没看到实数还WA了一发
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
typedef long long ll;
using namespace std; int main(){
double a,b; scanf("%lf%lf",&a,&b); printf("%.4lf\n",a+b);
return ;
}
B:
翻转数组
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
typedef long long ll;
using namespace std; const int N=;
int n;
ll a[N]; int main(){
scanf("%d",&n); rep(i,,n) scanf("%lld",&a[i]);
for (int i=n; i; i--) printf("%lld ",a[i]);
return ;
}
C:
给定每个数的小数点后有效位数,确定每个小数,使和为1。
所有数都取0.0...1,最后选一个位数最多的作为(1-其余的和),如果为负数则无解。
有几种特殊情况要讨论一下,写一个假的高精度就好。
手调几种情况都没有错,交上去爆零不懂为什么。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
typedef long long ll;
using namespace std; const int N=;
int n,mx,k,l,kk,a[N],d[N]; bool add(int x){
for (int i=x; i; i--){
d[i]++; if (d[i]<=) break; d[i]-=;
}
if (d[]>) return ; else return ;
} void sub(){ rep(i,,mx-) d[i]=-d[i]; d[mx]=-d[mx]; } int main(){
freopen("c.in","r",stdin);
freopen("c.out","w",stdout);
scanf("%d",&n);
if (n==) { puts("NO"); return ; }
rep(i,,n) scanf("%d",&a[i]),mx=max(mx,a[i]);
rep(i,,n) if (a[i]==mx) { k=i; break; }
rep(i,,n) if (a[i]==mx) l++;
if (l==){ puts("NO"); return ; }
if (l%==){ rep(i,,n) if (a[i]==mx && i!=k) { kk=i; break; } add(mx);};
rep(i,,n) if (i!=k)
if (add(a[i])) { puts("NO"); return ; }
sub(); puts("YES");
rep(i,,n) if (i!=k){
printf("0."); rep(j,,a[i]) printf("");
if (i==kk) puts(""); else puts("");
}else{
printf("0."); rep(j,,mx) printf("%d",d[j]); puts("");
}
return ;
}
D:
铺地砖,每次可以把两块一起翻90度,构造初始状态到最终状态的方案。
S和T都全部变成横的或竖的,然后把T的方案反过来输出就好了。不存在无解。
#include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
using namespace std; const int N=,K=;
char s[N][N];
int n,m,x[K],y[K],xn,cnt,t,k[]; void solve(){
k[t]=;
rep(i,,n){
scanf("%s",s[i]+);
rep(j,,m) k[s[i][j]]++;
}
while (k[t]){
rep(i,,n) rep(j,,m)
if (s[i][j]=='U' && s[i][j+]=='U'){
x[++cnt]=i; y[cnt]=j;
s[i][j]=s[i+][j]='L'; s[i][j+]=s[i+][j+]='R';
k['U']-=; k['L']+=;
}
if (!k[t]) return;
rep(i,,n) rep(j,,m)
if (s[i][j]=='L' && s[i+][j]=='L'){
x[++cnt]=i; y[cnt]=j;
s[i][j]=s[i][j+]='U'; s[i+][j]=s[i+][j+]='D';
k['U']+=; k['L']-=;
}
}
} int main(){
scanf("%d%d",&n,&m);
t=(n&) ? 'U' : 'L';
solve(); xn=cnt; solve(); printf("%d\n",cnt);
rep(i,,xn) printf("%d %d\n",x[i],y[i]);
for (int i=cnt; i>xn; i--) printf("%d %d\n",x[i],y[i]);
return ;
}
E:
每次将字符串任意分成两段,后半段翻转放前面,前半段直接放后面,构造S->T的方案,步数尽量少。
据说这种构造转移类题目主要思想是在维护好已构造部分的同时扩大构造范围。
3n做法:https://blog.csdn.net/qq_32506797/article/details/79377650
5/2 n做法 和 2n做法 分别在官网tutorial和tutorial的讨论区里,还没看。
下面是3n做法:
#include<cstdio>
#include<vector>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
using namespace std; const int N=;
int n;
char su[N], sv[N];
vector<int> vec; void shift(int x){
if (x==) return;
reverse(su+,su+n+); reverse(su+x+,su+n+);
vec.push_back(x);
} int main(){
scanf("%d%*d",&n);
scanf("%s", su+); scanf("%s", sv+);
rep(i,,n){
int j=i; while (j<=n && su[j]!=sv[n-i+]) j++;
if (j==n+) { puts("-1"); return ; }
shift(n); shift(j-); shift();
}
printf("%d\n",(int)vec.size());
for (int i=; i<vec.size(); i++) printf("%d ",vec[i]);
puts("");
return ;
}
APIO2018练习赛伪题解的更多相关文章
- 【伪题解】 [Offer收割]编程练习赛58
[A:最大的K-偏差排列]: 第一次在hiho卡一题,所以暴力了搜索了一下,70分,后面回来打表找规律,规律是有和K有关的周期. 当K<=N/2时,成周期交叉变化,最后尾部部分单独考虑. 当K& ...
- APIO2017伪题解
题目质量还是比较高的,只是当时澳大利亚方面出了一点问题?最后造成了区分度非常迷的局面. 纵观三道题,T1是披着交互外衣的提答题,T2是披着交互外衣的传统题,T3是一道据说近年来APIO最水的一道传统题 ...
- 伪题解 洛谷 P1363 幻想迷宫(DFS)
毒瘤题,做了一晚上抄题解A了 因为是抄题解,我也不好意思说什么了,就发篇博客纪念一下吧 #include<iostream> #include<cstring> #includ ...
- 牛客练习赛24题解(搜索,DP)
A题,C题不讲,基础题(但是我要抨击一下这次比赛,卡cin,cout,卡的太狠了,根本就不让过的那种,QAQ) 链接:https://www.nowcoder.com/acm/contest/157/ ...
- WC2018伪题解
NOIP分数过低的场外选手,一个月之后才有幸膜到这套卷子.感觉题目质量很不错啊,可惜了T1乱搞可过,T2题目出锅非集训队员没有通知到,导致风评大幅被害. 感觉Cu的话随手写两个暴力就稳了,Ag的话T3 ...
- [CTSC2017]最长上升自序列(伪题解)(Dilworth's theorem+网络流)
部分分做法很多,但每想出来一个也就多5-10分.正解还不会,下面是各种部分分做法: Subtask 1:k=1 LCS长度最长为1,也就是说不存在j>i和a[j]>a[i]同时成立.显然就 ...
- 洛谷 P3952时间复杂度 (本地AC测评RE的伪题解)
[题目描述] 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写 ...
- 牛客练习赛 66B题解
前言 当初思路 开始没想到异或这么多的性质,于是认为对于每个点\(u\),可以和它连边的点\(v\)的点权 \(a_v=a_u \oplus k\)(证明:\(\because\) \(a_u\opl ...
- 牛客练习赛66A题解
思路 令 \(sq=\sqrt x\) ,则答案必然在 $ sq^2$ 和 $ (sq+1)^2 $ 之间,两者比较一下谁离 \(x\) 最近,就是答案了. 代码 #include <bits/ ...
随机推荐
- 使用Ghost版本Windows7系统下载安装virtualBox和centos7异常解决
使用Ghost版本Windows7系统下载安装virtualBox和centos7异常解决: 下载安装运行virtualBox时出现获取VirtualBox对象严重错误(如图): 解决方案步骤: 在开 ...
- day-python入门3
本节内容 鸡汤.电影 IDE介绍 知识回顾 数据类型 For循环 while循环 列表及常用操作 IDE介绍 IDE即集成开发环境 常见IDE Visualstudio : w ...
- 重现ssd遇到的问题
首先是create_list.sh和create_data.sh中的data_dir的路径得修改. 然后是在create_data.sh文件调用$caffe_root下的scripts目录中的crea ...
- vue vscode 开始
E:\Html\4 Vue版>npm config set registry https://registry.npm.taobao.org E:\Html\4 Vue版>npm i &g ...
- dirname(__FILE__)
dirname() 函数返回路径中的目录部分. __FILE__ :被称为PHP魔术常量,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径 dirname(__FILE__) 函数返回的是脚 ...
- 【Luogu】P2498拯救小云公主(spfa)
题目链接 我水爆了- - 容易发现可以把两个圆之间连边,左上为起点右下为终点,最小生成树直到起点跟终点连起来,输出边权/2就行. 然后80. 并不理解为什么这可以转化成spfa求最短路,邻接矩阵暴力跑 ...
- @Transactional(rollbackFor=Exception.class)的作用
在项目中,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方 法抛出异常,就会回滚,数据库里面的数据也会回滚. 这种设置是因 ...
- HTTP基础--cookie机制和session机制
1.介绍cookie和session的区别,怎么获取与使用?(这个问题比较开放,可深可浅,现在将这里涉及的主要问题总计如下答案) 答: 一.cookie机制和session机制的区别 cookie机制 ...
- 控制属性为multiple的select
需求:实现点击查询,搜索对应渠道已投放.未投放批次.如图: html: <div class="form-inline margin-top-20"> <div ...
- 原生js获取屏幕的宽高
function client(){ if(window.innerHeight !== undefined){ return { "width": window.innerWid ...