赛时写了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. Redis经验谈(转)

    原文:http://www.programmer.com.cn/14577/ 新浪作为全世界最大的Redis用户,在开发和运维方面有非常多的经验.本文作者来自新浪,希望能为业界提供一些亲身经历,让大家 ...

  2. 【Python】easygui小甲鱼

    翻译改编自官方文档:http://easygui.sourceforge.net/tutorial/index.html 翻译改编者:小甲鱼,本文欢迎转载,转载请保证原文的完整性! 演示使用 Pyth ...

  3. "portrait"(竖屏) "landscape"(横屏) css设置

    取决于浏览器或者设备的方向,HTML元素总是会有"portrait"(竖屏) "landscape"(横屏) class. 你可以在css中如下使用它们: .p ...

  4. vue使用resource传参数

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. selenium python 启动Firefox

    我的火狐浏览器版本是最新的: 下载geckodrive:https://github.com/mozilla/geckodriver/releases/ 下载完后将exe文件放到这里“D:\firef ...

  6. testng入门教程16数据驱动(把数据写在xml)

    testng入门教程16数据驱动(把数据写在xml) testng入门教程16数据驱动(把数据写在xml)把数据写在xml文件里面,在xml文件右键选择runas---testng执行 下面是case ...

  7. MVC 页面传参到另一个页面

    写法一: @{ViewData["partData"]="哇哈哈哈哈";}    @{Html.RenderPartial("~/Views/Home ...

  8. AspxGridView点滴

    1:页码设置 1>: <SettingsPager Summary-Text="当前第 {0} 页 总共 {1} 页 ({2} 条记录)"></Settin ...

  9. 浏览器测试string是否为图片

    在浏览器中直接打如下代码.其中adcd为图片转成的string data:image/jpeg;base64,abcd

  10. 3:3 OGNL 表达式一

    一: 用例 (直接链式访问属性名,其实内部还是的调用set,get方法实现数据的流动); 二: 注意:表达式里面是没有方法的,只能点属性, 访问列表: (访问的时候加上#,表示访问非值栈的内容.) 访 ...