zoukankan      html  css  js  c++  java
  • 第三次月赛题解

    1000

    每天只要复习收益最大的那门课即可

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <queue>
     7 #include <stack>
     8 #include <vector>
     9 #include <map>
    10 #include <set>
    11 #include <string>
    12 #include <math.h>
    13 using namespace std;
    14 #pragma warning(disable:4996)
    15 typedef long long LL;                   
    16 const int INF = 1<<30;
    17 /*
    18 */
    19 const int N = 100 + 10;
    20 int dp[N][N];
    21 int a[N][N];
    22 char in[] = "D:\3\1004\0.in";
    23 char out[] = "D:\3\1004\0.out";
    24 char str[] = "0123456789";
    25 int main()
    26 {
    27     //for (int z = 0; z <= 9; ++z)
    28     {
    29         //in[10] = str[z];
    30         //out[10] = str[z];
    31         //freopen(in, "r", stdin);
    32         //freopen(out, "w", stdout);
    33         int n, m;
    34         while (scanf("%d%d", &n, &m) != EOF)
    35         {
    36             for (int i = 1; i <= n; ++i)
    37             {
    38                 for (int j = 1; j <= m; ++j)
    39                     scanf("%1d", &a[i][j]);
    40             }
    41 
    42             int ans = 0;
    43             for (int i = 1; i <= n; ++i)
    44             {
    45                 sort(a[i] + 1, a[i] + n + 1);
    46                 ans += a[i][n];
    47             }
    48             printf("%d
    ", ans);
    49         }
    50     }
    51     return 0;
    52 }
    View Code

    1001

    个位数的位数是1,十位的是2, 所以只要算出个位数的个数*1,加上十位数的个数*2,加....

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <queue>
     7 #include <stack>
     8 #include <vector>
     9 #include <map>
    10 #include <set>
    11 #include <string>
    12 #include <math.h>
    13 using namespace std;
    14 #pragma warning(disable:4996)
    15 typedef __int64 LL;
    16 const int INF = 1 << 30;
    17 /*
    18 
    19 */
    20 char in[] = "D:\3\1000\0.in";
    21 char out[] = "D:\3\1000\0.out";
    22 char str[] = "0123456789";
    23 int main()
    24 {
    25     //for (int z = 0; z <= 9; ++z)
    26     {
    27         //in[10] = str[z];
    28         //out[10] = str[z];
    29         //freopen(in, "r", stdin);
    30         //freopen(out, "w", stdout);
    31         LL n;
    32         while (scanf("%I64d", &n) != EOF)
    33         {
    34             char str[11];
    35             LL m = 1;
    36             sprintf(str, "%I64d", n);
    37             LL len = strlen(str);
    38             LL ans = 0;
    39             LL t = 9;
    40             LL i = 0;
    41             for (i = 0; i < len - 1; ++i)
    42             {
    43                 ans = ans + t * (i + 1);
    44                 t *= 10;//位数为i+1的数字有多少个
    45                 m = m * 10;
    46             }
    47             ans += (i + 1) * (n - m + 1);
    48             printf("%I64d
    ", ans);
    49             //puts("8888888899");
    50         }
    51     }
    52 
    53     return 0;
    54 }
    View Code

    1002

    ABC三根柱子

    设T(n)是将n个盘子借助一根柱子移到另一个柱子上去所要移动的最小次数, 那么要先将n-1个盘子移到B柱子上去,需要T(n-1)次,然后将第n个盘子移到C柱子上去,需要一次,然后将n-1个盘子移动C柱子上去

    需要T(n-1)次, 所以T(n) = 2*T(n-1) + 1

    设T(n)+1 = 2( T(n-1)+1 )  = 2 * 2( T(n-2)+1) = ... = 2^n    所以T(n) = 2^n - 1

    需要注意的是2^64 会爆

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <queue>
     7 #include <stack>
     8 #include <vector>
     9 #include <map>
    10 #include <set>
    11 #include <string>
    12 #include <math.h>
    13 using namespace std;
    14 #pragma warning(disable:4996)
    15 typedef unsigned __int64 LL;                   
    16 const int INF = 1<<30;
    17 /*
    18 
    19 */
    20 char str[] = "0123456789";
    21 char addressIn[] = "D:\3\1001\1.in";
    22 char addressOut[] = "D:\3\1001\1.out";
    23 int main()
    24 {
    25     int n;
    26     LL ans;
    27     //for (int i = 0; i < 9; ++i)
    28     {
    29         //addressIn[10] = str[i];
    30         //addressOut[10] = str[i];
    31         
    32         //freopen(addressIn, "r", stdin);
    33         //freopen(addressOut, "w", stdout);
    34         while (scanf("%d", &n) != EOF)
    35         {
    36             ans = 0;
    37             if (n == 0)
    38             {
    39                 puts("0");
    40                 continue;
    41             }
    42             else if (n == 64)
    43                 ans = 0;
    44             else
    45             {
    46                 ans = 1;
    47                 ans <<= n;
    48             }
    49             ans -= 1;
    50             printf("%I64u
    ", ans);
    51         }
    52     }
    53     return 0;
    54 }
    View Code

    1003

    根据异或的性质,  a^a = 0      a^a^a = a ,  所以将n个数字进行异或, 如果结果是0,说明所有的数字都出现了偶数次, 如果结果不为0,那么就输出

    需要注意的是,如果a为0,切出现了奇数次, 其异或结果也是0 ,  所以异或时将每个数字加1即可

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <queue>
     7 #include <stack>
     8 #include <vector>
     9 #include <map>
    10 #include <set>
    11 #include <string>
    12 #include <math.h>
    13 #include<time.h>
    14 using namespace std;
    15 #pragma warning(disable:4996)
    16 typedef long long LL;                   
    17 const int INF = 1<<30;
    18 /*
    19 
    20 */
    21 __int64 input()
    22 {
    23     char ch = getchar();
    24     while (ch<'0' || ch>'9')
    25         ch = getchar();
    26     __int64 x = 0;
    27     while (ch >= '0' && ch <= '9')
    28     {
    29         x = x * 10 + ch - '0';
    30         ch = getchar();
    31     }
    32     return x;
    33 }
    34 const LL MAX = 1152921504606846976LL;
    35 LL a[5000000+10];
    36 char in[] = "D:\3\1002\0.in";
    37 char out[] = "D:\3\1002\0.out";
    38 char str[] = "0123456789";
    39 int main()
    40 {
    41     int n;
    42     //for (int k = 0; k <= 9; ++k)
    43     {
    44         //in[10] = str[k];
    45         //freopen(in, "r", stdin);
    46         //freopen("D:\3\1002\0.out", "w", stdout);
    47 
    48         while (scanf("%d",&n)!=EOF)
    49         {
    50             LL ans = 0, x;
    51             for (int i = 0; i < n; ++i)
    52             {
    53                 //scanf("%I64d", &a[i]);
    54                 //input(a[i]);
    55                 a[i] = input();
    56                 a[i]++;
    57                 ans ^= a[i];
    58             }
    59             //sort(a, a + n);
    60             printf("%I64d
    ", ans==0?-1:ans-1);
    61         }
    62     }
    63     return 0;
    64 }
    View Code

    1004

    这个问题难点是不知道要打扫哪几列, 其实只要我们枚举每一行,使得这一行全为1, 那么就知道了要打扫哪几列,  然后判断剩下的n-1行,看打扫了这几列之后是否全为1

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <queue>
     7 #include <stack>
     8 #include <vector>
     9 #include <map>
    10 #include <set>
    11 #include <string>
    12 #include <math.h>
    13 using namespace std;
    14 #pragma warning(disable:4996)
    15 typedef long long LL;
    16 const int INF = 1 << 30;
    17 /*
    18 
    19 */
    20 const int N = 101;
    21 char a[N][N];
    22 int ans;
    23 int vis[N];
    24 char in[] = "D:\3\1005\9.in";
    25 char out[] = "D:\3\1005\9.out";
    26 char str[] = "0123456789";
    27 int main()
    28 {
    29     
    30     //for (int z = 0; z <= 9; ++z)
    31     {
    32         //in[10] = str[z];
    33         //out[10] = str[z];
    34         //freopen(in, "r", stdin);
    35         //freopen(out, "w", stdout);
    36         int n;
    37         while (scanf("%d", &n) != EOF)
    38         {
    39             memset(vis, 0, sizeof(vis));
    40             for (int i = 0; i < n; ++i)
    41                 scanf("%s", a[i]);
    42 
    43             ans = 0;
    44             for (int i = 0; i < n; ++i)
    45             {
    46                 bool flag = true;
    47                 for (int j = 0; j < n; ++j)
    48                 if (a[i][j] == '0')
    49                 {
    50                     flag = false;
    51                     break;
    52                 }
    53                 if (flag)
    54                     ans++;
    55             }
    56             int tmp;
    57             for (int i = 0; i < n; ++i)
    58             {
    59                 memset(vis, 0, sizeof(vis));
    60                 for (int j = 0; j < n; ++j)
    61                 {
    62                     if (a[i][j] == '0')
    63                         vis[j] = true;
    64                 }
    65                 tmp = 1;
    66                 for (int j = 0; j < n; ++j)
    67                 {
    68                     if (i == j) continue;
    69                     bool f = true;
    70                     for (int k = 0; k < n; ++k)
    71                     if (a[j][k] == '0' && !vis[k])
    72                     {
    73                         f = false;
    74                         break;
    75                     }
    76                     else if (a[j][k] == '1' && vis[k])
    77                     {
    78                         f = false;
    79                         break;
    80                     }
    81                     if (f)
    82                         tmp++;
    83                 }
    84                 ans = ans > tmp ? ans : tmp;
    85             }
    86             printf("%d
    ", ans);
    87         }
    88     }
    89     return 0;
    90 }
    View Code

    1005

    点这里

  • 相关阅读:
    转载【Ubuntu】Ubuntu14.04虚拟机调整窗口大小自适应VMware14窗口
    【ubuntu】安装输入法
    【虚拟机ubuntu】安装之后安装VMware tools
    【虚拟机ubuntu设置ssh】ssh连不上问题解决方法
    JavaScript常用函数
    Label自适应高度
    xcode 删除文件后编译会出现*** is missing from working copy
    找window的三种方法
    怎么查看Mac电脑的开机记录?
    iOS 跳转到系统的设置界面
  • 原文地址:https://www.cnblogs.com/justPassBy/p/4604001.html
Copyright © 2011-2022 走看看