喵哈哈村的木星传说

链接:http://qscoj.cn/problem/72/

喵哈哈村的木星传说(一)

发布时间: 2017年4月11日 20:01   最后更新: 2017年4月11日 20:01   时间限制: 1000ms   内存限制: 128M

描述

喵哈哈村有一个挂在空中的木星爷爷,每天晚上都讲一些故事。而星星同学,作为木星爷爷的听众,为了报答,于是每天晚上都会为他解决一个问题。

今天,星星同学要为木星爷爷解决这样一个问题:

给一个n*n的方阵,请将这个方阵顺时针旋转90°。

输入

本题包含若干组测试数据。
第一行一个n,表示这个方阵是n*n的方阵。
接下来n行,每行n个整数,表示方阵内的元素a[i][j]。

满足 1<=n<=50,abs(a[i][j])<=1e9

输出

输出顺时针旋转90°之后的方阵。

样例输入1

3
1 2 3
4 5 6
7 8 9

样例输出1

7 4 1
8 5 2
9 6 3题解:找规律
#include<bits/stdc++.h>
using namespace std;
const int maxn=55;
int a[maxn][maxn],b[maxn][maxn];
int main(){
    int n;
    while(cin>>n){
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++) cin>>a[i][j];
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++) {
                b[j][n-i-1]=a[i][j];
            }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++) {
                if(j!=n-1)cout<<b[i][j]<<" ";
                else cout<<b[i][j]<<endl;
            }
        }

    }
}

喵哈哈村的木星传说(二)

发布时间: 2017年4月11日 14:39   时间限制: 1000ms   内存限制: 128M

描述

喵哈哈村有一个挂在空中的木星爷爷,每天晚上都讲一些故事。而星星同学,作为木星爷爷的听众,为了报答,于是每天晚上都会为他解决一个问题。

今天,星星同学要为木星爷爷解决这样一个问题:

单词分类。

两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等。

例如:

“AABAC”,它和“CBAAA”就可以归为一类,而和“AAABB”就不是一类。

现在有N个单词,所有单词均由大写字母组成,每个单词的长度不超过100。

你要告诉我这些单词会被分成几类。

输入

本题包含若干组测试数据。
第一行一个N,表示有N个单词。
接下来N行,每行一个单词s[i]。

满足N<=100,strlen(s[i])<=100

输出

输出这些单词会被分成几类。

样例输入1

3
AAAAB
BAAAA
ABBBA

样例输出1

2
题解1:比较字母出现次数,分组tot++,标记
#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int num[maxn][26],vis[maxn];
int main(){
    int N;string s;
    while(cin>>N){
        int tot=0;
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
        for(int i=0;i<N;i++){

            cin>>s;
            for(int j=0;j<s.size();j++)num[i][s[j]-‘A‘]++;
        }

        for(int i=0;i<N;i++){
            if(vis[i]==1)continue;
            for(int k=0;k<N;k++){
                if(!vis[k]&&k!=i){
                    if(memcmp(num[i],num[k],26*sizeof(int))==0){
//比较,memcmp(对象1,对象2,字节长(类型))    相同为0
                        vis[k]=1;
                    }

                    }
                }
            tot++;
        }

        cout<<tot<<endl;
    }
}

题解2:

考虑每一个字符串,我们观察知道字符串的字母顺序实际上是没有关系的。

那么我们首先将字符串内的字符排序,然后再看看一共有多少种字符串就好了。

#include<bits/stdc++.h>
using namespace std;

set<string> S;//同样字符串只出现一次
int n;
int main(){
    while(cin>>n){
        S.clear();
        for(int i=0;i<n;i++){
            string s;
            cin>>s;
            sort(s.begin(),s.end());//字符串排序方法
            S.insert(s);//插入
        }
        cout<<S.size()<<endl;
    }
}

喵哈哈村的木星传说(三)

发布时间: 2017年4月11日 20:01   最后更新: 2017年4月11日 20:02   时间限制: 1000ms   内存限制: 128M

描述

喵哈哈村有一个挂在空中的木星爷爷,每天晚上都讲一些故事。而星星同学,作为木星爷爷的听众,为了报答,于是每天晚上都会为他解决一个问题。

今天,星星同学要为木星爷爷解决这样一个问题:

给出长度为N的数列a[i],每次可以从最左边或者最右边取走一个数,第i次取数得到的价值是i  *  a[i]。求价值之和最大的取数方案。

输入

本题包含若干组测试数据。
第一行一个n,表示数列的长度。
第二行n个整数,分别表示数列里的元素a[i]。

满足 1<=n<=2000,0<=a[i]<=1000

输出

输出最多和的答案。

样例输入1

5
1 3 1 5 2

样例输出1

43
题解:

考虑dp[i][j]表示左边选了i个,右边选了j个dp的最大值。

转移方程dp[i][j]=max(f[i-1][j]+(i+j)*a[i],f[i][j-1]+(i+j)*a[n-j+1]);

#include <bits/stdc++.h>
using namespace std;
const int maxn=2005;
int a[maxn],dp[maxn][maxn];

int main(){
    int n;
    while(cin>>n){
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)cin>>a[i];
        for(int i=0;i<=n;i++)
            for(int j=0;j<=n-i;j++){
                dp[i+1][j+1]=max(dp[i][j+1]+(i+j)*a[i],dp[i+1][j]+(i+j)*a[n+1-j]);
            }
        int ans=0;
        for(int i=0;i<=n;i++)ans=max(ans,dp[i+1][n+1-i]);
        cout<<ans<<endl;
    }
}

#include <bits/stdc++.h>
using namespace std;
const int maxn=2005;
int n;
int a[maxn],dp[maxn][maxn];

    int dfs(int i,int j){
    if(i<0||j<0) return 0;
    if(dp[i][j]) return dp[i][j];
        dp[i][j]=max(dfs(i-1,j)+(i+j)*a[i],dfs(i,j-1)+(i+j)*a[n+1-j]);
        return dp[i][j];
    }

int main(){

    while(cin>>n){
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)cin>>a[i];
        int ans=0;
        for(int i=0;i<=n;i++){

            ans=max(ans,dfs(i,n-i));
        }
        cout<<ans<<endl;
    }
}
				
时间: 2024-09-27 03:13:05

喵哈哈村的木星传说的相关文章

喵哈哈村的代码传说 1——4

链接:http://qscoj.cn/problem/35/ 喵哈哈村的代码传说 第一章 冒泡排序 发布时间: 2017年3月11日 11:35   最后更新: 2017年3月11日 11:36   时间限制: 1000ms   内存限制: 128M 描述 "敢问这位兄台,为何这喵哈哈广场围了这么多人?",一位年轻人模样的人问着旁边的卖报小哥. 卖报小哥一听,噗嗤一下,"这位兄弟,从你这问题来看,你可不是本地人.你可知今儿是什么日子?今天可是一年一度的挑战大会!"

喵哈哈村的代码传说 第四章 并查集

描述 有一个非常大的村子,叫做喵哈哈村,一开始他们都互相不认识,但是渐渐地,他们就会相互来往,所以就会有以下问题的产生: 1 x y,x家与y家成为朋友 2 x y,提问x家和y家是否为朋友,间接成为朋友也算. 输入 本题包含若干组测试数据.第一行两个整数n,m,表示这个村子有n户家庭,一开始他们都不认识.含有m个问题.接下来m行:1 x y2 x y分别表示操作和询问.满足1<=n,m<=100000,注意x 输出 是朋友输出Yes,否则输出N 样例输入1 复制 3 4 2 1 2 2 1

喵哈哈村的代码传说 第三章 宽度优先搜索

题目链接:http://qscoj.cn/problem/37/ 要写作业了-- 先上代码 #include<bits/stdc++.h> #define MAXN 10086 using namespace std; int dx[5]={0,-1,0,0,1}; int dy[5]={0,1,0,-1,0}; int mp[MAXN][MAXN];//标记数组 string s[MAXN];//s是一排,MAXN是列数 int n,m;//地图大小 int xx0,yy0,xx1,yy1;

喵哈哈村的代码传说 第一章 冒泡排序

输入 本题包含若干组测试数据.第一行一个n,表示有n个数.第二行n个整数a[i]. 保证 1<=n<=100000,1<=a[i]<=100000 输出 对于每组测试数据,输出从小到大排序后的结果.注意,每一行的末尾都得多加一个空格哦. #include<bits/stdc++.h>using namespace std;int n,a[100000],i;main(){ while(cin>>n) { for(int i=0;i<n;i++) cin

10喵哈哈村的魔法石

题目传送: 描述 传说喵哈哈村有三种神奇的魔法石:第一种魔法石叫做人铁石,拥有A的能量:第二种魔法石叫做地冈石,拥有B的能量:而第三种,则是最神奇的天玄石,拥有无可比拟的C的能量! 但是有一天,沈宝宝太调皮了,把一颗天玄石玩丢了-- "这可玩大发了,这样我会被天行廖责备的."沈宝宝悲伤的说到,"怎么办呢?" 这时候沈宝宝望了望窗外的飞过的白鸽,突然急中生智,想到了一个办法:干脆就用人铁石和地冈石把天玄石凑出来吧! "只要我拿若干个人铁石,若干个地冈石,他们

2017-5-20-Train: 喵哈哈村的魔法考试 Round #17 (Div.2)

A.喵哈哈村的秘境探险(数学) 描述 喵哈哈村的一堆人在前往北京的路上,发现了一个洞穴.由于好奇心大作,于是准备前往洞穴进行探险. 但是有一些人并不愿意前往洞穴,于是他们决定玩以下游戏,来看是否能够去秘境探险: 这儿有n个数,如果所有数的乘积是k的倍数,那么就去探险,否则就不去. 现在问你是否会去. 输入 本题包含若干组测试数据.第一行两个整数n,k,表示数的个数,和k.第二行n个整数,a[i].满足1<=n<=1000,1<=k,a[i]<=1e6 输出 如果要去的话,输出Yes

qscoj 128 喵哈哈村的魔法源泉(2)(模仿快速幂,好题)

喵哈哈村的魔法源泉(2) 发布时间: 2017年5月9日 20:59   最后更新: 2017年5月9日 21:00   时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村有一个魔法源泉,里面有无穷无尽的力量. 但是前提是你能答出这样一个问题: 给你a,b,p,让你输出a*b%p的值. 输入 本题包含若干组测试数据.第一行三个整数a,b,p. 满足:0<=a,b,p<=1e18 输出 输出答案 样例输入1 复制 10 1 7 样例输出1 3题目链接:http://qscoj.c

喵哈哈村的魔法考试 Round #7 (Div.2) B

  B 喵哈哈村的麦克雷  喵哈哈村的麦克雷 发布时间: 2017年3月13日 11:51   最后更新: 2017年3月14日 18:16   时间限制: 1000ms   内存限制: 128M 描述 为了拯救喵哈哈村,这个世界必须要存在英雄. 一名叫做麦克雷的英雄站了出来!他现在面临一个难题: 给定一个N x M的01矩阵,其中1表示陆地,0表示水域.对于每一个位置,求出它距离最近的水域的距离是多少. 矩阵中每个位置与它上下左右相邻的格子距离为1. 输入 本题包含若干组测试数据:第一行包含两

喵哈哈村的括号序列

描述 喵哈哈村的括号序列和外界的括号序列实际上是一样的. 众所周知"()"这样的,就是一个标准的括号序列:"()()()()"这样也是括号序列:"((()))()"这样也是一个合法的括号序列.但是"((("这样,就不是一个合法的括号序列了. 现在沈宝宝非常好奇,给你一个字符串,请从中找出最长的合法括号序列出来. 不知道你能找到吗? 输入 第一行一个T,表示有T组数据.接下来T行,每一行都是一个字符串.保证字符串的长度小于100