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/ ...
随机推荐
- 使用selenium监听每一步操作
1.创建类LogEventListener.java, 如下: package com.demo; import org.openqa.selenium.By; import org.openqa.s ...
- Django 运行 端口被占用 Error: That port is already in use
本来运行项目:python manage.py runserver 8000 发现运行到结果报错: Error: That port is already in use 首先查看已存在端口号列表: $ ...
- 聊聊、Mybatis Java注解实现
AbstractAnnotationConfigDispatcherServletInitializer public class MvcInitializer extends AbstractAnn ...
- Python读取不同文件夹下的图片并且分类放到新创建的训练文件夹和标签文件夹
在深度学习的训练时,经常会碰到训练的样本数据集和标签数据集是在一个文件夹中,这个时候我们就不得不进行一些数据的预处理和文件的分类,例如将训练(training data)数据集和标签数据集(label ...
- LINQ to Entities 不识别方法“System int string 转换的问题
这个问题困扰了挺久,网上找了挺多方法 都太好使. 分几种情况. 1.如果查询结果 转换,那比较容易. var q = from c in db.Customers where c.Country == ...
- Android React Native组件的生命周期及回调函数
熟悉android的童鞋应该都清楚,android是有生命周期的,其很多组件也是有生命周期.今天小编和大家分享的React Native组件的生命周期,还不了解的童鞋,赶紧来围观吧 在android开 ...
- BZOJ1823 [JSOI2010]满汉全席 【2-sat】
题目 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而能够烹饪出经过专家 ...
- 《c程序设计语言》-3.2 字符串转换
#include <stdio.h> #define Num 1000 int main() { int i = 0,j,k,count2 = 0; char s[Num] = {'\0' ...
- maven打包源码
1. 打包 main 目录代码到 jar 归档文件 mvn source:jar 2. 打包 test 目录代码到 jar 归档文件 mvn source:test-jar
- RUNAS UAC
cookielib pip install wmi _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE', 0, _winreg.KEY_ALL ...