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启动IE浏览器报错:selenium.common.exceptions.WebDriverException: Message: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode mu
意思是浏览器的保护模式设置不一致所导致 解决方案-->修改IE设置 将所有区域的保护模式勾选去掉即可
- php学习ing
cmd运行,表示在本地d:/php/workspace下文件映射在127.0.0.1的8080端口下,-S -t不要忘记 php -S 127.0.0.1:8080 -t E:\class_manag ...
- Limeng:Individual Project: Word frequency program -BUAA Advanced Software Engineering
11061190-李孟 Implement a console application to tally the frequency of words under a directory (2 mod ...
- 【python】用python爬取中科院院士简介信息
018/07/09 23:43 项目名称:爬取中科院871个院士的简介信息 1.爬取目的:中科院871个院士的简介信息 2.爬取最终结果: 3.具体代码如下: import re # 不用安装(注意! ...
- 【bzoj2506】calc 根号分治+STL-vector+二分+莫队算法
题目描述 给一个长度为n的非负整数序列A1,A2,…,An.现有m个询问,每次询问给出l,r,p,k,问满足l<=i<=r且Ai mod p = k的值i的个数. 输入 第一行两个正整数n ...
- REST Web 服务(二)----JAX-RS 介绍
1. 什么是JAX-RS? JAX-RS——Java API for RESTful Web Services,是为 Java 程序员提供的一套固定的接口(Java API),用于开发表述性状态转移( ...
- [洛谷P2216][HAOI2007]理想的正方形
题目大意:有一个$a\times b$的矩阵,求一个$n\times n$的矩阵,使该区域中的极差最小. 题解:二维$ST$表,每一个点试一下是不是左上角就行了 卡点:1.用了一份考试时候写的二维$S ...
- [poj] 2318 TOYS || 判断点在多边形内
原题 给出一个矩形玩具箱和其中隔板的位置,求每个玩具在第几个隔间内(保证没有在线上的玩具) 将玩具按x轴排序,记录当前隔板的编号,每次判断是否需要右移(左移)隔板(因为是有序的,所以移动次数左右不厚超 ...
- 2017 多校5 hdu 6093 Rikka with Number
2017 多校5 Rikka with Number(数学 + 数位dp) 题意: 统计\([L,R]\)内 有多少数字 满足在某个\(d(d>=2)\)进制下是\(d\)的全排列的 \(1 & ...
- 使用PowerShell登陆多台Windows,测试DCAgent方法
目标: 需要1台PC用域账户远程登陆10台PC,每台登陆后的PC执行发送敏感数据的操作后,再logoff. 在DCAgent服务器上,查看这10个用户每次登陆时,DCAgent是否能获取到登陆信息(I ...