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/ ...
随机推荐
- JMeter学习笔记(九) 参数化1--函数助手:_CSVRead
1.函数助手:_CSVRead 1)准备数据文件 ,文件可以是.csv格式,.dat格式,txt格式等 2)打开函数助手,生成参数 3)添加HTTP请求,引用参数 4)执行HTTP请求,察看结果树中的 ...
- django-settings里mysql连接配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dailyfresh', 'HOST': 'loca ...
- HDU 4474 Yet Another Multiple Problem ( BFS + 同余剪枝 )
没什么巧办法,直接搜就行. 用余数作为每个节点的哈希值. #include <cstdio> #include <cstring> #include <cstdlib&g ...
- [译]如何去除pandas dataframe里面的Unnamed的列?
原文来源: https://stackoverflow.com/questions/43983622/remove-unnamed-columns-in-pandas-dataframe 问:我有一个 ...
- HashMap 的深入学习
Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap.Hashtable.LinkedHashMap和TreeMap,类继承关系如下图 ...
- 比较运算符compareTo()、equals()、==之间的区别与应用总结
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配 ...
- 架构-UML类图
在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML Distilled: A Brief Guide to the Standard O ...
- [poj] 2286 The Rotation Game || ID-DFS
原题 有1234四个数字,每个数字八个.有八种方向的移动,使得操作后中间八个方块的数字相同,求最小操作步数. 对于这种求最小步数的看起来就是dfs的题,就ID-DFS就好了. //不知道为什么都是ID ...
- 虚拟机——mnt_hgfs下无目录情况解决
/mnt/hgfs下无目录情况解决: VMware8虚拟机安装Ubuntu 11.10使用share folders共享目录将虚拟机掉电关闭(不能暂停),设置share folders目录,重启虚拟机 ...
- 接水果(fruit)
接水果(fruit) 风见幽香非常喜欢玩一个叫做 osu! 的游戏,其中她最喜欢玩的模式就是接水果.由于她已经 DT FC 了 The big black,她觉得这个游戏太简单了,于是发明了一个更加难 ...