AHU校赛网赛解题报告

昨天闲的蛋碎决定还是做一遍这场比赛,比赛十分水,不过某些模型虽然原来知道,但这次也算第一次拍,总之还是有点纪念意义的。
所谓传送门: http://icpc.ahu.edu.cn/OJ/ContestProblemSet.aspx?cid=78
A    逃生的青蛙王子    136/552
01 #include <iostream>
02 using namespace std;
03
04 int main( void)
05 {
06     long long w , h , x , y;
07     cin >> w >> h >> x >> y;
08     if ( x > w - x) x = w - x;
09     if ( x > y) x = y;
10     if ( x > h - y) x = h - y;
11     cout << x << endl;
12     return 0;
13 }

B    跨越千山万水只为找到你    45/187
(*,向量题目,估计会拍一下)

C    越来越快    9/374
01  #include <cstdio>
02  #include <cstring>
03  using namespace std;
04 
05  typedef struct {
06      int d [ 3 ][ 3 ];
07  } _m33;
08 
09  #define m33_m0(r,a,b, m, n)    \
10     ((r)->d[m][n] = a->d[m][0] * b->d[0][n] + a->d[m][1] * b->d[1][n] + a->d[m][2] * b->d[2][n])
11 
12 
13 
14  void m33_m( _m33 * a , _m33 *b)
15  {
16      _m33 r;
17      m33_m0( & r , a , b , 0 , 0); m33_m0( & r , a , b , 0 , 1);
18      m33_m0( & r , a , b , 0 , 2);
19 
20      m33_m0( & r , a , b , 1 , 0); m33_m0( & r , a , b , 1 , 1);
21      m33_m0( & r , a , b , 1 , 2);
22 
23      m33_m0( & r , a , b , 2 , 0); m33_m0( & r , a , b , 2 , 1);
24      m33_m0( & r , a , b , 2 , 2);
25 
26      a -> d [ 0 ][ 0 ] = r . d [ 0 ][ 0 ]; a -> d [ 0 ][ 1 ] = r . d [ 0 ][ 1 ]; a -> d [ 0 ][ 2 ] = r . d [ 0 ][ 2 ];
27      a -> d [ 1 ][ 0 ] = r . d [ 1 ][ 0 ]; a -> d [ 1 ][ 1 ] = r . d [ 1 ][ 1 ]; a -> d [ 1 ][ 2 ] = r . d [ 1 ][ 2 ];
28      a -> d [ 2 ][ 0 ] = r . d [ 2 ][ 0 ]; a -> d [ 2 ][ 1 ] = r . d [ 2 ][ 1 ]; a -> d [ 2 ][ 2 ] = r . d [ 2 ][ 2 ];
29  }
30 
31  void m33_p( _m33 * a , int t)
32  {
33      _m33 m = {{{ 1 , 0 , 0 }, { 0 , 1 , 0 }, { 0 , 0 , 1 }}};
34      while( t) {
35          if ( t & 1)
36              m33_m( & m , a);
37          m33_m( a , a);
38          t >>= 1;
39      }
40      memcpy( a , & m , sizeof( _m33));
41  }
42 
43  int main( void)
44  {
45      int T;
46      scanf( "%d" , & T);
47      for(; T; -- T) {
48          int X , Y , A , B , m;
49          scanf( "%d%d%d%d%d" , & X , & Y , & A , &B , & m);
50          _m33 a = {{{ Y + X , X , 0 }, { 0 , 0 , 0 }, { 0 , 0 , 0 }}};
51          _m33 b = {{{B + 1 , 1 , 0 }, { A -B , 0 , 1 }, { - A , 0 , 0 }}};
52          if ( m == 0) printf( "0 \n ");
53          else if ( m == 1) printf( "%d \n " , X);
54          else if ( m == 2) printf( "%d \n " , X + Y);
55          else {
56              m33_p( &b , m - 2);
57              m33_m( & a , &b);
58              printf( "%d \n " , a . d [ 0 ][ 0 ]);
59          }
60      }
61      return 0;
62  }
D    锤子剪刀布    71/264
01  #include <iostream>
02  using namespace std;
03 
04  unsigned T;
05  unsigned k [ 3 ];
06  int map [ 3 ] = { 3 , 1 , 2 };
07 
08  int main( void)
09  {
10      cin >> T;
11      while( T) {
12          unsigned N , i;
13          cin >> N;
14          k [ 0 ] = k [ 1 ] = k [ 2 ] = 0;
15          while(N) {
16              cin >> i;
17              k [ i - 1 ] ++;
18              --N;
19          }
20          if ( k [ 0 ] == k [ 1 ] && k [ 1 ] == k [ 2 ]) cout << '0' << endl;
21          else {
22              i = k [ 1 ] >= k [ 2 ] ? 1 : 2;
23              i = k [ 0 ] > k [ i ] ? 0 : i;
24              cout << map [ i ] << endl;
25          }
26          -- T;
27      }
28      return 0;
29  }
E    彩灯高高挂    14/39
(- -开关,看心情决定拍不拍。)

F    序列计数    2/20
dp, 不过要优化, 因为O(N3)会TLE, 不过最后懒得优化一看范围就直接打表了,表如下,算法自己想。
#include <iostream>
using namespace std;

int tbl[] = {1,2,4,7,12,19,30,45,67,97,139,195,272,373,508,684,915,1212,1597,2087,2714,3506,4508,5763,7338,9296,11732,14742,18460,23025,5296,12138,20487,7297,19607,11157,5801,4105,6787,14639,5311,3228,9736,2998,8174,3976,16202,958,8233,18427,12656,19269,20862,798,13625,21574,11738,19234,11131,2963,12777,14298,7806,19993,11648,17568,7788,4182,11961,19690,1050,8322,11182,13626,9894,8274,10831,14179,13183,2031,2066,16650,13198,18667,9373,7161,17279,8841,17580,10886,15868,9143,653,18668,9712,12626,15284,14784,18399,14025,22706,3563,5722,8547,10933,18199,25,2240,21991,12640,5060,7976,4337,6461,727,20380,18946,11323,19972,8928,1503,22261,19240,7277,11710,917,551,10759,21518,19131,7932,2645,1452,2584,16362,8190,16285,19841,613,18286,11651,19015,9105,3166,22958,16813,19185,1960,20741,4911,3850,8831,3733,19168,8032,20045,9994,13317,13353,20443,4762,14533,21776,7721,18088,14423,1824,18498,8030,10895,13347,14287,18665,14732,19445,20569,8183,18282,4553,1802,4650,28,17712,1872,2448,22105,9470,4538,6705,4836,20613,18319,14757,1056,7042,3021,6010,15593,17583,3868,14529,7826,9160,7304,11011,3711,10546,10055,20500,18158,13538,13733,2285,5965,2540,22494,65,3721,12869,11192,18405,22263,23297,9343,16389,19409,803,18661,7623,21383,19060,8136,10759,7242,11232,15258,22991,19305,8098,10232,1432,9530,20307,1005,12146,11282,18659,19406,15955,22844,2070,11284,13589,1290,16653,3025,22263,11177,15808,14228,17220,21569,20831,9018,23012,20703,13237,18027,106,15631,2362,18559,16065,17204,18953,16625,21790,21566,13118,23064,16254,13848,20830,4915,5602,19541,20832,7329,10278,20798,21725,15114,3275,11807,7784,3946,12983,13057,5684,13478,11254,2357,5229,14643,14531,19322,4994,8900,10031,23193,4590,19581,10843,19109,555,1752,7815,4501,17963,19265,18902,55,18058,13854,3051,13082,1107,15743,17762,13264,1699,9042,8220,10978,8080,21050,123,5470,10060,20710,11470,1793,14218,20196,11202,22163,6026,1315,10982,2908,1423,11142,1459,19105,1709,538,21422,134,21142,13306,3914,22718,2009,14749,10198,14325,11877,14701,789,23104,23135,6030,1518,1056,4292,18245,3168,1817,14057,13433,6562,19704,17955,5107,20640,4616,15707,250,18207,21339,4098,2501,15103,22108,21554,3307,17252,23045,23072,12595,13098,21516,12826,5709,2485,21833,20513,4757,3055,19059,20741,4117,3205,9767,3714,12090,20054,1838,5412,19621,13907,18650,7203,7720,12863,6221,22425,10471,17632,20912,19365,23188,174,6661,18974,7104,20225,10105,6777,3543,8569,1274,15016,8058,8511,20070,13684,2732,18115,2813,15703,870,16329,9316,11731,12650,20426,14113,13069,2394,7352,3816,12817,4312,18849,22723,8423,5233,10285,15784,10443,16841,15678,8330,6337,10278,16643,10198,16815,13085,23020,18602,11605,7498,11380,6431,5948,20536,20389,4847,3268,19313,1988,6939,22244,17467,3703,5584,898,20918,11433,13831,6289,5978,259,11732,21317,2742,10548,20366,3643,2722,21635,22607,20254,20269,18991,4005,8615,10091,9356,5360,15635,1051,2610,15885,23101,17660,249,11790,22092,16199,17375,6639,10343,20376,7360,6557,17580,17886,16906,15953,13308,15150,8979,13921,23166,1654,20267,18278,10527,18099,12546,6196,3373,16936,11108,22906,18990,8812,109,5201,11382,7432,21286,8977,18644,11885,5548,2771,14830,8438,13588,13237,9031,20374,21572,19672,1258,13122,17659,12978,862,1003,8049,14717,2151,19442,4900,21918,5389,14496,19293,11678,14411,1807,21473,8867,23267,14198,900,7611,10575,10056,4863,14812,18854,12331,12128,13534,11988,5149,10435,2535,5238,20373,20235,8688,2686,12178,14678,9873,22594,20952,3957,17649,5722,4975,2770,21337,14317,7448,6934,6195,2175,18009,16311,9292,19505,22489,21186,13948,2629,5489,21803,8979,14518,3103,6752,20880,9635,1854,6859,8625,21641,993,3745,9455,7635,7753,15310,5323,8007,22855,12906,21267,4630,3638,12082,17929,7993,3884,11166,1760,4752,10037,4029,13717,17015,21854,10521,15323,12056,12333,16709,10478,13068,13655,11391,21312,23266,5875,12878,18599,1328,2336,11629,13413,15410,4405,137,13833,1274,1996,2038,9777,6900,21223,8985,8601,18399,9785,18235,14813,21942,11171,7600,10249,13527,10059,18985,19567,2294,12663,21916,9324,1314,13705,19817,8757,9967,11040,18012,21285,16470,1289,13322,452,18091,12435,21447,21164,15211,5095,22038,4602,7766,7461,9297,18315,21294,268,13765,219,23236,15508,880,6300,15029,6465,5819,6131,18355,20509,2837,2640,9429,8538,13230,435,7692,15963,20187,23211,19885,11071,22728,13550,2147,15893,1135,752,9221,4731,365,22497,16928,10156,10337,21,337,14155,14504,20528,21528,13858,4025,11286,23276,17304,5146,9896,163,1997,7912,15730,2471,2101,11974,22378,21255,2826,14392,14905,2065,3781,21785,4490,18412,18182,12836,23099,23331,3924,9611,5836,22146,2188,15381,8522,3529,6106,7689,9395,4561,3660,5995,19626,17766,492,22218,8896,8506,12541,13056,7228,5331,19558,21615,15152,21661,22606,21097,19216,3553,19707,15376,17748,22843,13865,18383,19906,2584,19981,12650,16751,5988,5949,6494,13042,6444,14213,9315,17897,13924,12384,11502,8450,10340,4958,3540,9243,9375,17360,1181,16474,10933,9833,15415,6111,6414,12739,14686,8461,1715,18007,14599,21613,15333,12239,4655,8519,4850,19370,13472,4499,16271,7856,22069,19529,257,16943,22066,3278,12959,5519,11906,8479,13526,5072,12079,7186,9373,18111,6240,9959,4397,13321,595,13523,20555,6836,22043,15075,1845,18327,18378,13040,19132,16836,19600,12374,21067,6045,10720,457,7922,14028,3375,12189,15869,9673,19867,11806,20603,11982,11496,18562,15868,4029,20925,15137,19884,18022,19240,6687,15473,22433,21029,18541,22271,13380,10844,14487,19182,15581,22273,10065,16980,1871,4639,4164,11698,20133,12334,10762,19735,5559,18155,3042,16730,2721,22001,2739,13497,5006,19782,16230,8674,4425,5814,7788,6682,3063,11635,10603,1202,19672,10643,4097,6731,739,6113,9878,17897,3182,18602,17998,7365,12940,6490,16096,22716,11642,11537,6973,874,13261,14945,8614,11193,6530,1235,8880,16500,16593,19344,12380,4351,19169,23057,14856,19281,21725,11491,5182,4447,5967,16801,2540,18869,21946,22017,8043,773,8862,15088,339,18121,19495,9252,1548,9527,18620,16812,15403,8664,23001,15476,17196,5048,6447,18629,9639,15386,2355,7129,9047,1007,3095,6034,5845,14662,1032,17132,9072,2820,8952,8814,10780,7543,2711,20219,8198,13785,5155,12562,15569,37,17333,22393,17630,725,2191,1134,1732,1007,16691,8878,23311,14948,10311,12817,7216,15211,15414,17893,22463,15247,13800,10198,13880,9927,122,667,17692,13691,22316,20927,10959,3176,7923,10025,14397,6144,8744,17016,1668,10738,15871,10474,5300,17630,11083,6567,18287,5910,2229,14593,265,10078,11112,12646,17368,4721,16145,11448,11833,1043,20263,15562,1753,14682,22248,15436,18985,7043,4731,2650,10041,6896,8708,6323,21563,6024,9411,20829,20897,20695,17639,8166,12183,6657,17724,20901,10917,17219,2512,13138,20399,2557,2038,3529,12146,14436,22868,16421,16431,1821,4477,9436,9998,4923,17758,394,20393,3338,4053,6838,8489,8881,8076,5093,18799,4279,11163,16584,12413,18264,20026,15973,14847,4207,8893,14239,16513,1020,22354,19617,13194,6619,10013,8207,3001,14640,19915,6895,19194,3543,54,1305,20500,19532,19653,18056,3724,5767,8091,19015,5835,17647,13738,16461,3586,8844,22208,14195,19804,20646,3687,4247,3397,20214,3752,19306,14369,3276,18718,3850,2705,8528,3650,11341,3872,2385,23212,5548,7261,13748,18957,10843,13246,2876,421,10129,19802,1009,9903,15835,21362,9244,22897,5741,18953,14623,1886,2815,13291,4245,4331,633,13537,14835,17321,9034,4207,1608,358,4868,11763,6489,17854,9077,5703,9172,6054,22936,19350,16218,8088,10077,871,3812,14882,8248,8252,5050,7836,4477,14619,10477,9101,2060,22217,6911,19194,19750,2833,20081,2475,9663,1320,17152,4581,7979,14616,9713,2286,1444,18041,8851,3067,4512,14864,12764,14511,19603,7564,17437,17987,4691,1772,11118,6707,6169,13671,18897,1226,3307,15739,16000,2719,17759,14213,5679,19511,19896,3019,5750,5511,10775,16205,15778,9327,531,2923,2435,11430,6874,16303,8640,1327,17881,4418,9296,3028,7730,22541,15198,14252,13185,1827,15116,6942,7463,22473,15113,16324,14431,18685,12513,12622,1752,5491,19529,1995,16172,14555,8070,7703,21411,8242,22687,4934,15798,22825,21325,11725,22779,20447,20617,15727,4268,21188,6769,1589,19566,3532,15511,4125,11297,9247,22458,21232,12318,8771,20315,22161,9520,14186,6830,8880,11794,20398,638,23158,17524,6592,14024,14621,2286,11558,8211,15394,16273,19746,15064,5930,1736,299,5661,6445,16730,6732,2974,16620,1350,6798,14588,4742,13737,14117,13092,2445,10892,7085,10424,7042,13589,14381,10382,11271,15428,17716,13572,7387,18512,22276,17010,17751,17704,8119,5865,7230,13405,9121,4014,7854,13797,6176,870,1447,6025,21542,12691,779,12996,1924,16896,15858,2115,14991,8442,9341,12394,15438,20229,2421,4230,10678,20013,9930,15581,20835,9306,6754,4610,17042,23061,20261,10169,7453,4560,3231,7608,21966,18899,5513,2058,14411,16966,21716,17563,10811,12173,14959,3282,2494,3996,21091,12978,8456,14971,10942,22182,5299,10823,10029,3669,18585,2505,20475,22132,18200,885,2203,5968,11491,1096,14457,18858,3399,11233,1906,3454,16359,20231,428,13093,7524,16085,20068,6919,3337,13002,7882,10900,21742,3036,4279,9992,8487,628,4567,15701,8690,2810,589,21957,8595,1940,18814,22841,14549,11107,15567,16849,6847,1110,7883,5865,17555,7858,6050,13389,21234,15493,12431,3619,22204,12861,21627,7426,5344,12220,19764,9293,14143,8182,19817,20661,17390,9578,997,10715,6165,22043,3444,14995,409,11530,17053,3076,16386,1552,12893,10034,8891,16027,23189,5773,22722,12875,16288,3515,18230,16338,20072,12693,18998,19253,11688,9348,7409,18656,12872,836,8471,1512,21385,19100,22810,5754,8451,11914,21270,2384,18539,18449,9742,3815,9129,2797,2232,14127,13532,2699,17473,8579,1794,9264,1410,16752,10294,12926,3923,12529,23316,2858,16023,21672,1132,5554,8132,19638,9514,14597,3334,17301,4698,20277,16497,15760,20266,2838,8614,318,7261,19251,5462,5109,22535,13966,3416,15375,17244,21406,11472,5494,5291,12320,21779,23038,11116,9407,16602,3877,12690,5473,11593,19302,21307,18190,22325,5120,12497,20938,9976,11211,17316,13236,19355,7348,19838,15188,14577,14126,12132,18306,482,4354,7371,19494,20820,2575,12583,201,23090,22598,15893,2032,21434,6217,5562,91,4495,6386,15092,8811,4739,21920,6659,15269,2989,7588,4889,3285,16691,19993,14787,7678,17695,9384,16195,10367,9528,733,2903,2760,8783,1236,14901,15953,12539,18383,4040,19428,19195,6829,13853,20547,13602,22339,3704,22317,2771,6758,13700,13985,8452,15840,6604,9226,1957,18905,9411,1452,15848,3902,14974,20720,21763,7150,3893,5670,19621,19758,13768,14102,20303,17675,2203,21257,17071,18031,5695,3277,9781,16363,7864,7328,3623,2250,16240,8364,9493,10449,22177,14260,20402,4889,20300,22819,3681,10033,3516,1156,4565,2172,1998,4298,22469,3531,1415,9286,4361,1520,11688,7467,17258,20967,8525,5951,9268,10236,9525,10217,16026,1460,6750,9326,13586,8014,5560,7737,1659,14492,19057,22318,778,2625,15173,11213,6213,6371,7630,43,8636,6487,8202,16997,12546,14505,14031,5585,1787,256,11629,18431,21379,21722,21053,20363,2676,3930,8794,3176,19610,18107,14185,11099,17482,9773,8883,19496,10702,20798,5404,6560,20591,20367,9948,3123,18669,10149,10641,1596,21491,22954,706,18785,19512,17659,22263,10608,9766,8418,5142,22779,3077,11676,7232,1135,4382,13308,22095,9917,6313,11963,17481,18107,22435,14750,13486,19244,12097,14813,19581,14426,18303,3741,18939,1784,7012,18549,10049,397,12291,1275,3126,398,8491,3039,15350,6568,5398,11431,5613,14803,15842,22921,11403,20924,14175};
int main(void)
{
    int T, N;
    cin >> T;
    while(T) {
        cin >> N;
        int sum = 0;
        while(N)
            sum = (sum + tbl[--N]) % 23333;
        cout << sum << endl;
        --T;
    }
    return 0;
}

G    字符串的价值    77/222
第一眼看像dp, 但可证明贪心, 当然这是按套路来, 其实凭感觉做就行。
01  #include <cstring>
02  #include <iostream>
03  using namespace std;
04 
05  char str [ 1001 ];
06 
07  int main( void)
08  {
09      int M;
10      cin >> M;
11      for(; M; -- M) {
12          cin >> str;
13          int i , k , t;
14          t = 0;
15          for( i = k = 1; str [ i ]; ++ i) {
16              if ( str [ i - 1 ] == str [ i ]) ++ k;
17              else {
18                  t += k * k;
19                  k = 1;
20              }
21          }
22          t += k * k;
23          cout << t << endl;
24      }
25      return 0;
26  }
H    抢占白房子    77/317
01  #include <iostream>
02  #include <cstring>
03  using namespace std;
04 
05  char map [ 8 ][ 8 ];
06 
07  int main( void)
08  {
09      cin >> map [ 0 ] >> map [ 1 ] >> map [ 2 ] >> map [ 3 ] >> map [ 4 ] >>
10          map [ 5 ] >> map [ 6 ] >> map [ 7 ];
11      int i , j , c = 0;
12      for( i = 0; i < 8; i ++)
13          for( j = 0; j < 8; ++ j)
14              if ( !( i + j & 1) && map [ i ][ j ] == 'F')
15                  ++ c;
16      cout << c << endl;
17      return 0;
18  }


更新:
B    跨越千山万水只为找到你    45/187
跨立。。
01  #include <cstdio>
02  using namespace std;
03 
04  #define multc(i,j)    (i[0]*j[1] - i[1]*j[0])
05 
06  double straddle( double i [], double j [], double k [])
07  {
08      double ti [] = { k [ 0 ] - i [ 0 ], k [ 1 ] - i [ 1 ]};
09      double tj [] = { j [ 0 ] - i [ 0 ], j [ 1 ] - i [ 1 ]};
10      return multc( ti , tj);
11  }
12 
13  int main( void)
14  {
15      int t , n;
16      scanf( "%d" , & t);
17      for(; t; -- t) {
18          scanf( "%d" , &n);
19          double S [ 2 ], T [ 2 ];
20          scanf( "%lf%lf%lf%lf" , &S [ 0 ], &S [ 1 ], & T [ 0 ], & T [ 1 ]);
21          int c = 0;
22          for(;n; --n) {
23              double U [ 2 ], V [ 2 ];
24              scanf( "%lf%lf%lf%lf" , & U [ 0 ], & U [ 1 ], & V [ 0 ], & V [ 1 ]);
25              c += straddle( U , S , V) * straddle( U , T , V) < 0;
26          }
27          printf( "%d \n " , c);
28      }
29      return 0;
30  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值