日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2021-4-1 多校省选模拟赛

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021-4-1 多校省选模拟赛 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 考試復盤
  • nmd

考試復盤

T1T1T1

我可太喜歡這種不要腦子的莽試題了!!

考場上猜的結論d>3d>3d>3無解

d=1,d=2d=1,d=2d=1,d=2的填法也試出來了

d=3d=3d=3只試出來了n,mn,mn,m333的倍數的填法

但是另外的情況就GGGGGG

最后交上去竟然還敲掛了(ˉ▽ˉ;)…烏雞鲅魚

這道題應該是這一段考試以來唯幾接近整正解的題目了

思考的:大討論,猜結論

T2T2T2

發現了很多小性質,想到了與根號有關的因子上面去

但是,呃emmmmmm~~

我不知道這個集合應該怎么填

所以找到的那些小性質并沒有什么卵用

(和善的微笑

思考的:質數/因子有關的各種算法,DPDPDP

T3T3T3

考場上敲得暴力——又掛了w(゚Д゚)waz

鏈想的樹形DPDPDP但是也沒打,沒想明白

看到無環的部分分也想不出做法

思考的:tarjantarjantarjan強連通,樹形DPDPDP,暴力,后綴數組(純粹是看到了字符串比較

nmd

大討論好哇b( ̄▽ ̄)d

  • n,m,dn,m,dn,m,d都是奇數

    ?1-1?1

  • d>3d>3d>3

    ?1-1?1

    在考場上肯定是猜的結論,就是反復試啊,就是連不出來

    (1,1)(1,1)(1,1)先開始滿足,要往外連>3>3>3條線,肯定跨越了一個小正方格

    感性理解都感覺最后幾行會有點被困住連不出去

  • d=1d=1d=1

    • 點數為奇數

      ?1-1?1

    • 點數為偶數

      相鄰兩個連邊即可

  • d=2d=2d=2

    • 點數為奇數
    • 點數為偶數
  • d=3d=3d=3

    • n=3n=3n=3

      • m=4m=4m=4

        ?1-1?1

      • m=6m=6m=6

      • otherwiseotherwiseotherwise

        排除掉兩邊的對稱,中間一定是偶數列,兩兩配對即可

    • n,mn,mn,m為偶數

    • otherwiseotherwiseotherwise

      • m=5m=5m=5
      • otherwiseotherwiseotherwise

代碼雖然有三百多行,7K大,但是是非常不動腦子的莽敲,請不要感到害怕,ㄟ(▔=▔)ㄏ

#include <cstdio> #include <iostream> using namespace std; int T, n, m, d; bool flag;void print( int x1, int y1, int x2, int y2 ) {if( flag ) printf( "%d %d %d %d\n", y1, x1, y2, x2 );else printf( "%d %d %d %d\n", x1, y1, x2, y2 ); }void subtask1() {printf( "%d\n", ( n * m ) >> 1 );if( n & 1 ) swap( n, m ), flag = 1;for( int i = 1;i <= n;i ++ )for( int j = 1;j <= m;j ++ )if( i & 1 )print( i, j, i + 1, j ); }void subtask2() {printf( "%d\n", ( n * m * d ) >> 1 );if( ( n & 1 ) && ( m & 1 ) ) {//redprint( 1, 1, 2, 2 );print( n, 1, n, 2 );//yellowfor( int i = 1;i < n;i ++ )print( i, 1, i + 1, 1 );//bluefor( int i = 3;i <= n;i ++ )for( int j = 2;j < m;j ++ )print( i, j, i, j + 1 );//greenfor( int i = 3;i <= n;i ++ )if( ( n - i + 1 ) & 1 )print( i, m, i - 1, m );elseprint( i, 2, i - 1, 2 );//pinkfor( int i = 2;i <= m;i ++ )print( 1, i, 2, i ); //orangefor( int i = 2;i < m;i ++ )if( i & 1 )print( 2, i, 2, i + 1 );elseprint( 1, i, 1, i + 1 );} else {if( n & 1 ) swap( n, m ), flag = 1;//redprint( 1, 1, 1, 2 );print( n, 1, n, 2 );//yellowfor( int i = 1;i < n;i ++ )print( i, 1, i + 1, 1 );//bluefor( int i = 1;i <= n;i ++ )for( int j = 2;j < m;j ++ )print( i, j, i, j + 1 );//greenfor( int i = 1;i < n;i ++ )if( i & 1 )print( i, m, i + 1, m );elseprint( i, 2, i + 1, 2 ); } }void subtask3_0() {if( n != 3 ) swap( n, m ), flag = 1;if( m == 4 ) {printf( "-1\n" );return;}printf( "%d\n", ( n * m * d ) >> 1 );//red print( 1, 1, 2, 1 );print( 2, 1, 3, 1 );print( 1, m, 2, m );print( 2, m, 3, m );for( int i = 1;i < m;i ++ )print( 1, i, 1, i + 1 ), print( 3, i, 3, i + 1 );if( m == 6 ) {print( 1, 1, 2, 2 );print( 2, 1, 2, 2 );print( 3, 1, 2, 2 );print( 1, 2, 2, 3 );print( 3, 2, 2, 3 );print( 3, 3, 2, 3 );print( 1, 6, 2, 5 );print( 2, 6, 2, 5 );print( 3, 6, 2, 5 );print( 1, 5, 2, 4 );print( 1, 4, 2, 4 );print( 3, 5, 2, 4 );print( 1, 3, 3, 4 );}else {//yellowprint( 1, 1, 2, 2 );print( 2, 1, 2, 2 );print( 3, 1, 2, 2 );print( 1, 2, 2, 3 );print( 1, 3, 2, 3 );print( 3, 2, 2, 3 );print( 1, 4, 2, 4 );print( 3, 3, 2, 4 );print( 3, 4, 2, 4 );//greenfor( int i = 5;i <= m - 4;i ++ )print( 1, i, 2, i ), print( 2, i, 3, i );//pinkfor( int i = 5;i <= m - 4;i ++ )if( i & 1 )print( 2, i, 2, i + 1 );//blueprint( 1, m, 2, m - 1 );print( 2, m, 2, m - 1 );print( 3, m, 2, m - 1 );print( 1, m - 1, 2, m - 2 );print( 1, m - 2, 2, m - 2 );print( 3, m - 1, 2, m - 2 );print( 1, m - 3, 2, m - 3 );print( 3, m - 3, 2, m - 3 );print( 3, m - 2, 2, m - 3 );} }void subtask3_1() {printf( "%d\n", ( n * m * d ) >> 1 );if( ! ( n & 1 ) && ! ( m & 1 ) ) {//redprint( 1, 1, 2, 2 );print( 1, m, 2, m - 1 );//yellowfor( int i = 1;i < m;i ++ )print( 1, i, 1, i + 1 );//greenfor( int i = 1;i <= m;i ++ )print( 1, i, 2, i );//bluefor( int i = 1;i <= m;i ++ )if( i & 1 )print( 2, i, 2, i + 1 );for( int i = 2;i <= n - 2;i ++ ) {//pinkprint( i, 1, i + 1, 1 );print( i, m, i + 1, m );if( i & 1 ) {//greyprint( i, 2, i + 1, 2 );print( i, m - 1, i + 1, m - 1 );//orangefor( int j = 1;j < m;j ++ )print( i, j, i, j + 1 );//purplefor( int j = 1;j < m;j ++ )print( i + 1, j, i + 1, j + 1 );}else {//blackfor( int j = 3;j <= m - 2;j ++ )print( i, j, i + 1, j );}}//redprint( n, 1, n - 1, 2 );print( n, m, n - 1, m - 1 );//yellowfor( int i = 1;i < m;i ++ )print( n, i, n, i + 1 );//greenfor( int i = 1;i <= m;i ++ )print( n, i, n - 1, i );//bluefor( int i = 1;i <= m;i ++ )if( i & 1 )print( n - 1, i, n - 1, i + 1 );}else {if( n & 1 ) swap( n, m ), flag = 1;if( m == 5 ) {//redprint( 1, 1, 2, 2 );print( 1, 1, 2, 1 );print( 2, 1, 2, 2 );print( 1, 2, 2, 3 );print( 1, 3, 2, 3 );print( 1, m, 2, m - 1 );//yellowfor( int i = 1;i < m;i ++ )print( 1, i, 1, i + 1 );//greenfor( int i = 4;i <= m;i ++ )print( 1, i, 2, i );//bluefor( int i = 4;i <= m;i ++ )if( ! ( i & 1 ) )print( 2, i, 2, i + 1 );for( int i = 2;i <= n - 2;i ++ ) {//pinkprint( i, 1, i + 1, 1 );print( i, m, i + 1, m );if( i & 1 ) {//greyprint( i, m - 1, i + 1, m - 1 );//orangefor( int j = 1;j < m;j ++ )print( i, j, i, j + 1 );//purplefor( int j = 1;j < m;j ++ )print( i + 1, j, i + 1, j + 1 );}else {//blackfor( int j = 2;j <= m - 2;j ++ )print( i, j, i + 1, j );}}//redprint( n, 1, n - 1, 1 );print( n, 1, n - 1, 2 );print( n - 1, 1, n - 1, 2 );print( n, 2, n - 1, 3 );print( n, 3, n - 1, 3 );print( n, m, n - 1, m - 1 );//yellowfor( int i = 1;i < m;i ++ )print( n, i, n, i + 1 );//greenfor( int i = 4;i <= m;i ++ )print( n, i, n - 1, i );//bluefor( int i = 4;i <= m;i ++ )if( ! ( i & 1 ) )print( n - 1, i, n - 1, i + 1 );}else {//redprint( 1, 1, 2, 2 );print( 2, 1, 2, 2 );print( 2, 3, 2, 4 );print( 1, m, 2, m - 1 );//yellowfor( int i = 1;i < m;i ++ )print( 1, i, 1, i + 1 );//greenfor( int i = 1;i <= m;i ++ )print( 1, i, 2, i );//bluefor( int i = 4;i <= m;i ++ )if( ! ( i & 1 ) )print( 2, i, 2, i + 1 );for( int i = 2;i <= n - 2;i ++ ) {//pinkprint( i, 1, i + 1, 1 );print( i, m, i + 1, m );if( i & 1 ) {//greyprint( i, 2, i + 1, 2 );print( i, 4, i + 1, 4 );print( i, m - 1, i + 1, m - 1 );//orangefor( int j = 1;j < m;j ++ )print( i, j, i, j + 1 );//purplefor( int j = 1;j < m;j ++ )print( i + 1, j, i + 1, j + 1 );}else {//blackprint( i, 3, i + 1, 3 );for( int j = 5;j <= m - 2;j ++ )print( i, j, i + 1 , j);}}//redprint( n, 1, n - 1, 2 );print( n - 1, 1, n - 1, 2 );print( n - 1, 3, n - 1, 4 );print( n, m, n - 1, m - 1 );//yellowfor( int i = 1;i < m;i ++ )print( n, i, n, i + 1 );//greenfor( int i = 1;i <= m;i ++ )print( n, i, n - 1, i );//bluefor( int i = 4;i <= m;i ++ )if( ! ( i & 1 ) )print( n - 1, i, n - 1, i + 1 );}} }int main() {freopen( "nmd.in", "r", stdin );freopen( "nmd.out", "w", stdout );scanf( "%d", &T );while( T -- ) {scanf( "%d %d %d", &n, &m, &d );if( ( d > 3 ) || ( ( d & 1 ) && ( n & 1 ) && ( m & 1 ) ) )printf( "-1\n" );else if( d == 1 )subtask1();else if( n == 1 || m == 1 )printf( "-1\n" );else if( d == 2 )subtask2();else if( n == 2 || m == 2 )printf( "-1\n" );else if( n == 3 || m == 3 )subtask3_0();elsesubtask3_1();flag = 0;}return 0; }

總結

以上是生活随笔為你收集整理的2021-4-1 多校省选模拟赛的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。