AtCoder Tenka1 Programmer Beginner Contest 解题报告

赛时写了ABC,D实在没啥思路,然后C又难调...然后就从写完AB时的32名掉到了150+名 T_T 码力不够,思维不行,我还是AFO吧 比赛链接 A - Measure sb模拟,奇数串倒着输出偶数串正着输出 View Code B - Exchange 还是模拟...按着题意的要求来就好,奇数一种情况偶数一种情况 然后一边+12,一边−12就好 View Code C - Align 很恶心的分类讨论 首先要知道一个结论,最中间的数一定是最大或者最小的,然后我们可以在旁边依次填入最大/次大/最小/次小的数 对串的奇偶分开讨论(取mid的不同) 然后对于中间填最大还是填最小也要分开讨论 然后综合几种情况取个最优就行 写的有点长,实际上应该不用这么多代码的QAQ View Code D - Crossing 写这题之前一定要先读懂题意 我比赛时一直读错题意,到结束时脑子里想的还是错误的题意....然后就炸了 令k为所选子集的数量。 任何两个子集的交集大小为1,并且为1,2,...,N中的任何一个元素也使用了两次 对于选出来的子集的限制就是这样的 我们不妨把这些子集抽象成点,交集抽象成边,于是1−n这些元素就是边的种类 那么不难看出整个图有k(k−1)2条边,并且边的数目要等于n 于是可以枚举出来这个k先,qzz大佬好像推了一个式子O(1)求出了这个k,不过我数学比较菜就直接枚举了T_T 然后如果这个k枚举不出来就说明无解(一个比较玄学的地方,我从1枚举到n来判会WA掉第一个点,其他都没问题,然后从1枚举到500就没问题,不知道是怎么回事) 然后来连边 因为每个元素要沟通两个子集 所以类似于完全图那样连边就好 复制代码 int x = 0 ; for( int i = 0 ; i < k ; i ++ ) { for( int j = i + 1 ; j < k ; j ++ ) { x ++ ; s[ i ].push_back( x ) ; s[ j ].push_back( x ) ; } } 复制代码 然后就没了 所以说这题的主要难度在于读懂题意T_T 复制代码 #include #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 = 0 , f = 1 ; char c = getchar() ; while( c < '0' || c > '9' ) { if( c == '-' ) f = -1 ; c = getchar() ; } while( c >= '0' && c <= '9' ) { x = (x << 1) + (x << 3) + c - 48 ; c = getchar() ; } return x * f ; } #undef I_int using namespace std ; #define N 100010 int n , k ; vectors[N]; int main() { in1( n ) ; k = -1 ; for( int i = 1 ; i < 500 ; i ++ ) if( i * ( i - 1 ) / 2 == n ) { k = i ; break ; } if( k == -1 ) { return puts("No"),0; } int x = 0 ; for( int i = 0 ; i < k ; i ++ ) { for( int j = i + 1 ; j < k ; j ++ ) { x ++ ; s[ i ].push_back( x ) ; s[ j ].push_back( x ) ; } } puts("Yes"); outn(k); for( int i = 0 ; i < k ; i ++ ) { out((int)s[i].size()); int len = s[ i ].size(); for( int j = 0 ; j < len ; j ++ ) { out_(s[i][j]); } putchar('\n'); } return 0 ; } 复制代码https://www.cnblogs.com/henry-1202/p/9879994.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信