AtCoder Tenka1 Programmer Beginner Contest 解题报告
赛时写了ABC,D实在没啥思路,然后C又难调...然后就从写完AB时的32名掉到了150+名
T_T
码力不够,思维不行,我还是AFO吧
A - Measure
sb模拟,奇数串倒着输出偶数串正着输出
#include <bits/stdc++.h> #define ll long long
#define inf 0x3f3f3f3f
#define il inline #define in1(a) a=read()
#define in2(a,b) in1(a),in1(b)
#define in3(a,b,c) in2(a,b),in1(c)
#define in4(a,b,c,d) in2(a,b),in2(c,d)
#define out(a) printf( "%d" , a )
#define outn(a) out(a),putchar('\n') #define I_int int
inline I_int read() { I_int x = , f = ; char c = getchar() ;
while( c < '' || c > '' ) {
if( c == '-' ) f = - ;
c = getchar() ;
}
while( c >= '' && c <= '' ) {
x = (x << ) + (x << ) + c - ;
c = getchar() ;
}
return x * f ;
}
#undef I_int using namespace std ; #define N 100010 char s[ N ] ; int main() {
scanf( "%s" , s + ) ;
int len = strlen( s+ ) ;
if( len == ) puts( s + ) ;
else {
for( int i = len ; i ; i -- ) putchar( s[ i ] ) ;
}
}
B - Exchange
还是模拟...按着题意的要求来就好,奇数一种情况偶数一种情况
然后一边$+\frac{1}{2}$,一边$-\frac{1}{2}$就好
#include <bits/stdc++.h> #define ll long long
#define inf 0x3f3f3f3f
#define il inline #define in1(a) a=read()
#define in2(a,b) in1(a),in1(b)
#define in3(a,b,c) in2(a,b),in1(c)
#define in4(a,b,c,d) in2(a,b),in2(c,d)
#define out(a) printf( "%d" , a )
#define outn(a) out(a),putchar('\n') #define I_int int
inline I_int read() { I_int x = , f = ; char c = getchar() ;
while( c < '' || c > '' ) {
if( c == '-' ) f = - ;
c = getchar() ;
}
while( c >= '' && c <= '' ) {
x = (x << ) + (x << ) + c - ;
c = getchar() ;
}
return x * f ;
}
#undef I_int using namespace std ; #define N 100010
int a[ ] , k ; int main() {
in2( a[ ] , a[ ] ) ; in1( k ) ;
for( int i = ; i <= k ; i ++ ) {
if( a[ i % ] % ) a[ i % ] -- ;
a[ ( i % ) ^ ] += a[ i % ] / ;
a[ i % ] -= a[ i % ] / ;
}
out( a[ ] ) , putchar(' ') , outn( a[ ] ) ;
}
C - Align
很恶心的分类讨论
首先要知道一个结论,最中间的数一定是最大或者最小的,然后我们可以在旁边依次填入最大/次大/最小/次小的数
对串的奇偶分开讨论(取mid的不同)
然后对于中间填最大还是填最小也要分开讨论
然后综合几种情况取个最优就行
写的有点长,实际上应该不用这么多代码的QAQ
#include <bits/stdc++.h> #define ll long long
#define inf 0x3f3f3f3f
#define il inline #define in1(a) a=read()
#define in2(a,b) in1(a),in1(b)
#define in3(a,b,c) in2(a,b),in1(c)
#define in4(a,b,c,d) in2(a,b),in2(c,d)
#define out(a) printf( "%d" , a )
#define outn(a) out(a),putchar('\n') #define I_int int
inline I_int read() { I_int x = , f = ; char c = getchar() ;
while( c < '' || c > '' ) {
if( c == '-' ) f = - ;
c = getchar() ;
}
while( c >= '' && c <= '' ) {
x = (x << ) + (x << ) + c - ;
c = getchar() ;
}
return x * f ;
}
#undef I_int using namespace std ; #define N 100010 int n ;
int b[ N ] ;
int a[ N ] ;
ll ans = ; int main() {
in1( n ) ;
for( int i = ; i <= n ; i ++ ) in1( a[ i ] ) ;
sort( a+ , a+n+ ) ;
int l = , r = n , mid = ( l + r ) >> ;
if( n % ) {
b[ mid ] = a[ r -- ] ;
for( int i = mid - ; i ; i -- ) {
if( ( mid - i ) % ) b[ i ] = a[ l ++ ] , b[ mid + mid - i ] = a[ l ++ ] ;
else b[ i ] = a[ r -- ] , b[ mid + mid - i ] = a[ r -- ] ;
}
ll sum = ;
for( int i = ; i <= n ; i ++ ) sum += abs( b[ i ] - b[ i - ] ) ;
ll t = sum ;
l = , r = n ;
b[ mid ] = a[ l ++ ] ;
for( int i = mid - ; i ; i -- ) {
if( ( mid - i ) % == ) b[ i ] = a[ l ++ ] , b[ mid + mid - i ] = a[ l ++ ] ;
else b[ i ] = a[ r -- ] , b[ mid + mid - i ] = a[ r -- ] ;
}
sum = ;
for( int i = ; i <= n ; i ++ ) sum += abs( b[ i ] - b[ i - ] ) ;
printf( "%lld\n" , max( t , sum ) ) ;
return ;
}
b[ mid ] = a[ r -- ] ;
b[ mid + ] = a[ l ++ ] ;
for( int i = mid - ; i ; i -- ) {
if( ( mid - i ) % ) b[ i ] = a[ l ++ ] , b[ n - i + ] = a[ r -- ] ;
else b[ i ] = a[ r -- ] , b[ n - i + ] = a[ l ++ ] ;
}
ll sum = , t = ;
for( int i = ; i <= n ; i ++ ) {
sum += abs( b[ i ] - b[ i - ] ) ;
}
t = sum ;
l = , r = n ;
b[ mid + ] = a[ r -- ] ;
b[ mid ] = a[ l ++ ] ;
for( int i = mid - ; i ; i -- ) {
if( ( mid - i ) % == ) b[ i ] = a[ l ++ ] , b[ n - i + ] = a[ r -- ] ;
else b[ i ] = a[ r -- ] , b[ n - i + ] = a[ l ++ ] ;
}
sum = ;
for( int i = ; i <= n ; i ++ ) {
sum += abs( b[ i ] - b[ i - ] ) ;
}
printf( "%lld\n" , max( sum , t ) ) ;
}
D - Crossing
写这题之前一定要先读懂题意
我比赛时一直读错题意,到结束时脑子里想的还是错误的题意....然后就炸了
令k为所选子集的数量。
任何两个子集的交集大小为1,并且为1,2,...,N中的任何一个元素也使用了两次
对于选出来的子集的限制就是这样的
我们不妨把这些子集抽象成点,交集抽象成边,于是$1-n$这些元素就是边的种类
那么不难看出整个图有$\frac{k(k-1)}{2}$条边,并且边的数目要等于n
于是可以枚举出来这个k先,qzz大佬好像推了一个式子$O(1)$求出了这个k,不过我数学比较菜就直接枚举了T_T
然后如果这个k枚举不出来就说明无解(一个比较玄学的地方,我从1枚举到n来判会WA掉第一个点,其他都没问题,然后从1枚举到500就没问题,不知道是怎么回事)
然后来连边
因为每个元素要沟通两个子集
所以类似于完全图那样连边就好
int x = ;
for( int i = ; i < k ; i ++ ) {
for( int j = i + ; j < k ; j ++ ) {
x ++ ;
s[ i ].push_back( x ) ;
s[ j ].push_back( x ) ;
}
}
然后就没了
所以说这题的主要难度在于读懂题意T_T
#include <bits/stdc++.h> #define ll long long
#define inf 0x3f3f3f3f
#define il inline #define in1(a) a=read()
#define in2(a,b) in1(a),in1(b)
#define in3(a,b,c) in2(a,b),in1(c)
#define in4(a,b,c,d) in2(a,b),in2(c,d)
#define out(a) printf( "%d" , a )
#define out_(a) printf( " %d" , a )
#define outn(a) out(a),putchar('\n') #define I_int int
inline I_int read() { I_int x = , f = ; char c = getchar() ;
while( c < '' || c > '' ) {
if( c == '-' ) f = - ;
c = getchar() ;
}
while( c >= '' && c <= '' ) {
x = (x << ) + (x << ) + c - ;
c = getchar() ;
}
return x * f ;
}
#undef I_int using namespace std ; #define N 100010 int n , k ; vector<int>s[N]; int main() {
in1( n ) ;
k = - ;
for( int i = ; i < ; i ++ )
if( i * ( i - ) / == n ) { k = i ; break ; }
if( k == - ) { return puts("No"),; }
int x = ;
for( int i = ; i < k ; i ++ ) {
for( int j = i + ; j < k ; j ++ ) {
x ++ ;
s[ i ].push_back( x ) ;
s[ j ].push_back( x ) ;
}
}
puts("Yes"); outn(k);
for( int i = ; i < k ; i ++ ) {
out((int)s[i].size());
int len = s[ i ].size();
for( int j = ; j < len ; j ++ ) {
out_(s[i][j]);
}
putchar('\n');
}
return ;
}
还是太菜,还是要继续努力啊QAQ
AtCoder Tenka1 Programmer Beginner Contest 解题报告的更多相关文章
- Tenka1 Programmer Beginner Contest D - IntegerotS(位运算)
传送门 题意 给出N,K,给出N对数a[i],b[i],选择一些数使得or和小于k且\(max\sum b[i]\) 分析 枚举k的每一个1位,将其删去并让低位全为1,对于每一个这样的数c,如果a[i ...
- Tenka1 Programmer Beginner Contest D IntegerotS(补)
当时没做出来,官方题解没看懂,就看别人提交的代码,刚对着别人代码调了几组数据,才发现,思路差不多,不过,原来是这样实现啊,果然我还是很菜 思路:题目要求是选取的这些数字全部进行OR运算,结果<= ...
- Atcoder Tenka1 Programmer Contest D: IntegerotS 【思维题,位运算】
http://tenka1-2017.contest.atcoder.jp/tasks/tenka1_2017_d 给定N,K和A1...AN,B1...BN,选取若干个Ai使它们的或运算值小于等于K ...
- Atcoder Tenka1 Programmer Contest C C - 4/N
http://tenka1-2017.contest.atcoder.jp/tasks/tenka1_2017_c 我怀疑我是不是智障.... 本来一直的想法是能不能构造出答案,把N按奇偶分,偶数好办 ...
- Atcoder Tenka1 Programmer Contest 2019
C 签到题,f[i][0/1]表示以i结尾最后一个为白/黑的最小值,转移显然. #include<bits/stdc++.h> using namespace std; ; ]; char ...
- Atcoder Tenka1 Programmer Contest 2019 题解
link 题面真简洁 qaq C Stones 最终一定是连续一段 . 加上连续一段 # .直接枚举断点记录前缀和统计即可. #include<bits/stdc++.h> #define ...
- Atcoder Tenka1 Programmer Contest 2019 E - Polynomial Divisors
题意: 给出一个多项式,问有多少个质数\(p\)使得\(p\;|\;f(x)\),不管\(x\)取何值 思路: 首先所有系数的\(gcd\)的质因子都是可以的. 再考虑一个结论,如果在\(\bmod ...
- Atcoder Tenka1 Programmer Contest 2019 D Three Colors
题意: 有\(n\)个石头,每个石头有权值,可以给它们染'R', 'G', 'B'三种颜色,如下定义一种染色方案为合法方案: 所有石头都染上了一种颜色 令\(R, G, B\)为染了'R', 染了'G ...
- Atcoder Tenka1 Programmer Contest 2019题解
传送门 \(C\ Stones\) 最后肯定形如左边一段白+右边一段黑,枚举一下中间的断点,预处理一下前缀和就可以了 int main(){ // freopen("testdata.in& ...
随机推荐
- gulp-webserver
gulp-webserver是开启服务器,通常和gulp-livereload结合使用.而这两个结合使用效果,几乎类似browser-Sync.下面是gulp-webserver和gulp-liver ...
- PAT 1045 Favorite Color Stripe[dp][难]
1045 Favorite Color Stripe (30)(30 分) Eva is trying to make her own color stripe out of a given one. ...
- 7.5 Models -- Persisting Records
一.概述 1. 在Ember Data上以每个实例为基础,records被持久化.在DS.Model的任何一个实例上调用save()并且它将产生一个网络请求. 2. 下面是一些例子: var post ...
- SpringMyBatisDay01
1.Spring简介 Spring是一个开源轻量级应用开发框架,其目的是用于简化企业级应用程序的开发,降低侵入性Spring提供IOC和AOP功能,可以将组件(就是类)之间的耦合度降至最低,解耦,便于 ...
- Base64编码加密
package liferay; public class Base64 { public static final char EQUAL = '='; public static final cha ...
- codeforces D - Arthur and Walls
这题说的是给了一个矩阵,必须让.连接起来的图形变成矩形,2000*2000的矩形,那么我们就可以知道了,只要是存在一个有点的区域应该尽量将他削为矩形,那么将这个图形进行缩放,最后我们知道只要存在一个2 ...
- Azkaban 简介
本文简单介绍一下Azkaban及其特点.azkaban是一个开源的任务调度系统,用于负责任务的调度运行(如数据仓库调度),用以替代linux中的crontab. 一.Azkaban是什么? 1.1 A ...
- Python: 字典列表: itemgetter 函数: 根据某个或某几个字典字段来排序列表
问题:根据某个或某几个字典字段来排序Python列表 answer: 通过使用operator 模块的itemgetter 函数,可以非常容易的排序这样的数据结构 eg: rows = [ {'fna ...
- 深度学习的集成方法——Ensemble Methods for Deep Learning Neural Networks
本文主要参考Ensemble Methods for Deep Learning Neural Networks一文. 1. 前言 神经网络具有很高的方差,不易复现出结果,而且模型的结果对初始化参数异 ...
- CSS3实现8种Loading效果【二】
CSS3实现8种Loading效果[二] 今晚吃完饭回宿舍又捣鼓了另外几种Loading效果,老规矩,直接“上菜“…… 注:gif图片动画有些卡顿,非实际效果! 第一种效果: 代码如下: < ...