zoukankan      html  css  js  c++  java
  • hihoCoder编程练习赛72

    题目1 : 玩具设计师

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    小Ho作为Z国知名玩具品牌AKIRE的首席设计师,对玩具零件的挑剔程度已经到了叹为观止的地步。所有的玩具零件均在一块由N × M个单位块组成的设计板上切割获得。每个单位块有一个耐用指数aij。

    由于玩具制作安全标准要求每个零件的面积至少大于等于S,小Ho想要知道设计板上能切割出满足标准的最大耐用指数的玩具零件为多少。

    输入

    输入共N+1行,第一行三个整数N,M,S表示设计板的大小以及安全标准中对玩具零件面积的最低要求

    第二行到第N+1行每行M个整数表示各个单位块的耐用指数。

    1 ≤ N, M ≤ 300, 1 ≤ S ≤ 90000, |aij| ≤ 104

    输出

    输出共一行,表示满足安全要求的最大耐用指数。

    样例输入
    3 3 3
    -3 -4 2
    4 1 -2
    3 -2 3
    
    样例输出
    7

    思路:枚举矩形左上角点(x,y)和右下角点(i,j),o(n^4)居然也能过

     1 //2018-08-12
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <algorithm>
     6 
     7 using namespace std;
     8 
     9 const int N = 350;
    10 const int INF = 0x3f3f3f3f;
    11 
    12 int M[N][N], n, m, s;
    13 
    14 int main()
    15 {
    16     while(cin>>n>>m>>s){
    17         for(int i = 0; i < n; i++)
    18           for(int j = 0; j < m; j++){
    19               cin>>M[i][j];
    20           }
    21         for(int i = 1; i < n; i++)
    22           for(int j = 0; j < m; j++)
    23             M[i][j] += M[i-1][j];
    24         for(int j = 1; j < m; j++)
    25           for(int i = 0; i < n; i++)
    26             M[i][j] += M[i][j-1];
    27         int ans = -INF;
    28         for(int i = 0; i < n; i++){
    29             for(int j = 0; j < m; j++){
    30                 for(int x = 0; x <= i; x++){
    31                     for(int y = 0; y <= j; y++){
    32                         if((i-x+1)*(j-y+1) < s)break;
    33                         int tmp = M[i][j];
    34                         if(x-1 >= 0)tmp -= M[x-1][j];
    35                         if(y-1 >= 0)tmp -= M[i][y-1];
    36                         if(y-1>=0 && x-1>=0)tmp += M[x-1][y-1];
    37                         ans = max(ans, tmp);
    38                     }
    39                 }
    40             }
    41         }
    42         cout<<ans<<endl;
    43     }
    44 
    45     return 0;
    46 }
    View Code

    题目2 : 剪切字符串

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    小Hi有一个长度为N的字符串,这个字符串每个位置上的字符两两不同。现在小Hi可以进行一种剪切操作:

    选择任意一段连续的K个字符,把这段子串剪下来,粘在串首或者串尾。例如ABCDE -> ADEBC、ABCDE -> BCADE或者ABCDE -> DEABC等。  

    小Hi想知道如果可以反复进行任意次剪切操作,他最多可能得到多少种不同的字符串。由于数目可能非常大,你只需要输出模P(P是质数)的余数即可。

    输入

    三个整数N, K和P。  

    1 ≤ K ≤ N ≤ 107, 1 ≤ P ≤ 109 P是质数

    输出

    一个整数代表答案。

    样例输入
    6 5 11
    样例输出
    6

    思路:打表找规律,打表代码

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 #include <algorithm>
     5 #include <set>
     6 #include <queue>
     7 
     8 using namespace std;
     9 
    10 int main()
    11 {
    12     for(int n = 1; n <= 10; n++){
    13         for(int k = 1; k <= n; k++){
    14             string str(n, '.');
    15             queue<string> que;
    16             set<string> st;
    17             set<string>::iterator iter;
    18             for(int i = 0; i < n; i++)
    19               str[i] = 'a'+i;
    20             que.push(str);
    21             st.insert(str);
    22             while(!que.empty()){
    23                 string ss = que.front();
    24                 que.pop();
    25                 for(int i = 0; i+k < n; i++){
    26                     string ss1(ss, i, k);
    27                     string ss2 = "";
    28                     for(int j = 0; j < i; j++)
    29                       ss2.push_back(ss[j]);
    30                     for(int j = i+k; j < n; j++)
    31                       ss2.push_back(ss[j]);
    32                     string s1 = ss1+ss2;
    33                     iter = st.find(s1);
    34                     if(iter == st.end()){
    35                         st.insert(s1);
    36                         que.push(s1);
    37                     }
    38                     string s2 = ss2+ss1;
    39                     iter = st.find(s2);
    40                     if(iter == st.end()){
    41                         st.insert(s2);
    42                         que.push(s2);
    43                     }
    44                 }
    45             }
    46             cout<<n<<" "<<k<<" -> "<<st.size()<<endl;
    47         }
    48     }
    49 
    50     return 0;
    51 }
    打表代码

    AC代码

     1 //2018-08-12
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <algorithm>
     6 #define ll long long
     7 
     8 using namespace std;
     9 
    10 int main(){
    11     ll n, k, p;
    12     cin>>n>>k>>p;
    13     ll num2 = 1LL;
    14     for(int i = 0; i < n-2; i++)
    15       num2 = (num2*(n-i))%p;
    16     ll num1 = (num2*2)%p;
    17     if(n==k){
    18         cout<<1<<endl;
    19     }else if(k == n-1){
    20         cout<<n<<endl;
    21     }else{
    22         if(k&1LL){
    23             cout<<num1<<endl;
    24         }else cout<<num2<<endl;
    25     }
    26     return 0;
    27 }
    View Code
  • 相关阅读:
    QPushButton设置背景图片,设置背景透明度
    QMessageBox 弹窗提示总结
    Qt中 QObject * sender() const的用法
    Java获取文件后缀
    Qt QLabel设置背景色
    Qt 设置程序图标
    程序猿 tensorflow 入门开发及人工智能实战
    Github + Hexo 搭建博客
    Linux常用命令
    深度学习路线记录
  • 原文地址:https://www.cnblogs.com/Penn000/p/9463079.html
Copyright © 2011-2022 走看看