传送门: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练习赛伪题解的更多相关文章

  1. 【伪题解】 [Offer收割]编程练习赛58

    [A:最大的K-偏差排列]: 第一次在hiho卡一题,所以暴力了搜索了一下,70分,后面回来打表找规律,规律是有和K有关的周期. 当K<=N/2时,成周期交叉变化,最后尾部部分单独考虑. 当K& ...

  2. APIO2017伪题解

    题目质量还是比较高的,只是当时澳大利亚方面出了一点问题?最后造成了区分度非常迷的局面. 纵观三道题,T1是披着交互外衣的提答题,T2是披着交互外衣的传统题,T3是一道据说近年来APIO最水的一道传统题 ...

  3. 伪题解 洛谷 P1363 幻想迷宫(DFS)

    毒瘤题,做了一晚上抄题解A了 因为是抄题解,我也不好意思说什么了,就发篇博客纪念一下吧 #include<iostream> #include<cstring> #includ ...

  4. 牛客练习赛24题解(搜索,DP)

    A题,C题不讲,基础题(但是我要抨击一下这次比赛,卡cin,cout,卡的太狠了,根本就不让过的那种,QAQ) 链接:https://www.nowcoder.com/acm/contest/157/ ...

  5. WC2018伪题解

    NOIP分数过低的场外选手,一个月之后才有幸膜到这套卷子.感觉题目质量很不错啊,可惜了T1乱搞可过,T2题目出锅非集训队员没有通知到,导致风评大幅被害. 感觉Cu的话随手写两个暴力就稳了,Ag的话T3 ...

  6. [CTSC2017]最长上升自序列(伪题解)(Dilworth's theorem+网络流)

    部分分做法很多,但每想出来一个也就多5-10分.正解还不会,下面是各种部分分做法: Subtask 1:k=1 LCS长度最长为1,也就是说不存在j>i和a[j]>a[i]同时成立.显然就 ...

  7. 洛谷 P3952时间复杂度 (本地AC测评RE的伪题解)

    [题目描述] 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写 ...

  8. 牛客练习赛 66B题解

    前言 当初思路 开始没想到异或这么多的性质,于是认为对于每个点\(u\),可以和它连边的点\(v\)的点权 \(a_v=a_u \oplus k\)(证明:\(\because\) \(a_u\opl ...

  9. 牛客练习赛66A题解

    思路 令 \(sq=\sqrt x\) ,则答案必然在 $ sq^2$ 和 $ (sq+1)^2 $ 之间,两者比较一下谁离 \(x\) 最近,就是答案了. 代码 #include <bits/ ...

随机推荐

  1. Python导出sql语句结果到Excel

    本文档是因为每周需要统计线上数据库中客户新增资源,手动执行实在是麻烦,就写了个脚本导出到Excel,顺便发一封邮件. (当然这不是线上的真实脚本,不过根据个人需求稍微修改下,还是可以直接用的.拿去不谢 ...

  2. Python 基础学习篇

    注:技术尚浅,时间匆忙,如有错误或者不当之处值得商榷的,请留言,吾必思而改之. 第一篇 :Python基础- 安装/变量/输入/及循环语句使用 第二篇:  Python基础- 常用数据类型 第三篇: ...

  3. 牛客网暑期ACM多校训练营(第一场):D-Two Graphs

    链接:D-Two Graphs 题意:给出图G1和G2,求G2的子图中和G1同构的个数. 题解:只有8个点,暴力枚举G2的点每个排列,让G1映射到G2中,求出同构个数a.同构的G2就是在G1有边的对应 ...

  4. STL之map&multimap使用简介

    map 1.insert 第一种:用insert函数插入pair数据 #include <map> #include <string> #include <iostrea ...

  5. TZOJ3043: 取个标题好难 最长的出现次数>=k的不重复子串长度

    3043: 取个标题好难  Time Limit(Common/Java):6000MS/18000MS     Memory Limit:65536KByteTotal Submit: 17     ...

  6. java作业 2017.10.14

    课后作业一 1.设计思想: (1)通过组合数公式计算:分别输入中的n和k的值.定义一个计算n!的方法,然后调用方法分别计算出n!,k!,(n-k)!,然后通过公式=n!/(k!*(n-k)!)算出的值 ...

  7. [NOI2015][bzoj4197] 寿司晚宴 [状压dp+质因数]

    题面 传送门 思路 首先,要让两个人选的数字全部互质,那么有一个显然的充要条件:甲选的数字的质因数集合和乙选的数字的质因数集合没有交集 30pt 这种情况下n<=30,也就是说可用的质数只有10 ...

  8. POJ3717 Decrypt the Dragon Scroll

    Description Those who have see the film of "Kong Fu Panda" must be impressive when Po open ...

  9. gdb server调试步骤

    编译gdb/gdbserver 编译arm-linux-gdb 下载gdb-7.12,解压缩进入目录 ./configure --target=arm-linux --program-prefix=a ...

  10. echarts异步加载

    echarts体积很大,在移动端使用异步加载是一种提高渲染速度的方法,结合webpack的做法如下: require.ensure([], function(require){ const echar ...