赛时写了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. HTTP上传大文件的注意点

    使用HttpWebRequest上传大文件时,服务端配置中需要进行以下节点配置: <system.web> <compilation debug="true" t ...

  2. 从MySQL开发规范处看创业

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/n88Lpo/article/details/78099185 作者:唐勇.深圳市环球易购.MySQL ...

  3. clientHeight , scrollHeight , offsetHeight之间的区别

    clientHeight:元素客户区的大小,指的是元素内容及其边框所占据的空间大小(经过实践取出来的大多是视口大小) scrollHeight: 滚动大小,指的是包含滚动内容的元素大小(元素内容的总高 ...

  4. HTML 显示/隐藏DIV的技巧(visibility与display的差别)

    参考链接:http://blog.csdn.net/szwangdf/article/details/1548807 div的visibility可以控制div的显示和隐藏,但是隐藏后页面显示空白: ...

  5. Summary: difference between public, default, protected, and private key words

    According to Java Tutorial: Controlling Access to Members of a Class Access level modifiers determin ...

  6. 自动加载 autoload

    自动加载  是什么时候调用的 是实例化某个对象的时候,在当前脚本中没有找到对应类的时候 ,如果当前找到了就不会调用__autoload方法 例如:例子一,找到类 <?php function _ ...

  7. memcache图形管理工具

    http://www.junopen.com/memadmin/其中有使用截图和介绍 https://github.com/junstor/memadmin 下载地址

  8. 关于Redis-存Long取Integer类型转换错误的问题;String对象被转义的问题

    背景 最近遇到了两个Redis相关的问题,趁着清明假期,梳理整理. 1.存入Long类型对象,在代码中使用Long类型接收,结果报类型转换错误. 2.String对象的反序列化问题,直接在Redis服 ...

  9. Yii2 配置 Nginx 伪静态

    主要检查以下代码: location / { # Redirect everything that isn't a real file to index.php try_files $uri $uri ...

  10. bzoj3196: Tyvj 1730 二逼平衡树 树套树

    地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3196 题目: 3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec ...