赛时写了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 解题报告的更多相关文章

  1. 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 ...

  2. Tenka1 Programmer Beginner Contest D IntegerotS(补)

    当时没做出来,官方题解没看懂,就看别人提交的代码,刚对着别人代码调了几组数据,才发现,思路差不多,不过,原来是这样实现啊,果然我还是很菜 思路:题目要求是选取的这些数字全部进行OR运算,结果<= ...

  3. Atcoder Tenka1 Programmer Contest D: IntegerotS 【思维题,位运算】

    http://tenka1-2017.contest.atcoder.jp/tasks/tenka1_2017_d 给定N,K和A1...AN,B1...BN,选取若干个Ai使它们的或运算值小于等于K ...

  4. Atcoder Tenka1 Programmer Contest C C - 4/N

    http://tenka1-2017.contest.atcoder.jp/tasks/tenka1_2017_c 我怀疑我是不是智障.... 本来一直的想法是能不能构造出答案,把N按奇偶分,偶数好办 ...

  5. Atcoder Tenka1 Programmer Contest 2019

    C 签到题,f[i][0/1]表示以i结尾最后一个为白/黑的最小值,转移显然. #include<bits/stdc++.h> using namespace std; ; ]; char ...

  6. Atcoder Tenka1 Programmer Contest 2019 题解

    link 题面真简洁 qaq C Stones 最终一定是连续一段 . 加上连续一段 # .直接枚举断点记录前缀和统计即可. #include<bits/stdc++.h> #define ...

  7. Atcoder Tenka1 Programmer Contest 2019 E - Polynomial Divisors

    题意: 给出一个多项式,问有多少个质数\(p\)使得\(p\;|\;f(x)\),不管\(x\)取何值 思路: 首先所有系数的\(gcd\)的质因子都是可以的. 再考虑一个结论,如果在\(\bmod ...

  8. Atcoder Tenka1 Programmer Contest 2019 D Three Colors

    题意: 有\(n\)个石头,每个石头有权值,可以给它们染'R', 'G', 'B'三种颜色,如下定义一种染色方案为合法方案: 所有石头都染上了一种颜色 令\(R, G, B\)为染了'R', 染了'G ...

  9. Atcoder Tenka1 Programmer Contest 2019题解

    传送门 \(C\ Stones\) 最后肯定形如左边一段白+右边一段黑,枚举一下中间的断点,预处理一下前缀和就可以了 int main(){ // freopen("testdata.in& ...

随机推荐

  1. IO流(2)创建文件或文件夹

    创建功能: *public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了 *public boolean mkdir():创建文件夹 如果存在这样的文件夹, ...

  2. [Google Maps API 3]Marker从Clusterer中分离及Marker置于Cluster上一层的解决办法

    在Google Maps API的使用中,经常用到Clusterer来避免过密的Marker显示.但仔细看一下Clusterer的设置参数中并没有直接将某些Marker除外的方法,那遇到这样的需求,怎 ...

  3. 在ios上时间无法parse返回 "Invalid Date"

    百度搜索:" ios 上面 new date" 关键字 BUG 描述直接上原码 var psrseDate = Date.parse("2010-03-15 10:30: ...

  4. [vue]spa单页开发及vue-router基础

    - 了解spa页面跳转方式:(2种) spa: 单页跳转方式 开发(hash模式): https://www.baidu.com/#2313213 生产(h5利于seo): history.pushS ...

  5. [LeetCode] 103. Binary Tree Zigzag Level Order Traversal _ Medium tag: BFS

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  6. [LeetCode] All questions numbers conclusion 所有题目题号

    Note: 后面数字n表明刷的第n + 1遍, 如果题目有**, 表明有待总结 Conclusion questions: [LeetCode] questions conclustion_BFS, ...

  7. [redis] 介绍安装

    redis相关网站 官方网站:http://redis.io/ redis简介 官方介绍:http://redis.io/topics/introduction 百度百科:http://baike.b ...

  8. Integer类之成员变量

    一.一共11个成员变量. 二.详情介绍. 1.value值.这个是Integer类的唯一标志.最重要的实例属性. 2.最小值和最大值常量.注意,计算机里面是以补码形式保存的,因此用十六进制时,给的数据 ...

  9. 023-centos6.5上安装使用xtrabackup

    第一步:下载.这个就看你选择什么样的安装方式了,有二进制安装,有源码包安装,有在线的rpm安装.我选择二进制安装方式,所以下载时选择linux-Generic.下载后用rz命令在xshell上上传到l ...

  10. MySQL从删库到跑路_高级(七)——事务和锁

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.事务简介 1.事务简介 事务(Transaction)是指作为单个逻辑工作单元执行的一系列操作. 2.事物的特效 ...