0
点赞
收藏
分享

微信扫一扫

寒假训练——周赛2

芭芭蘑菇 2022-01-15 阅读 31
c++

目录

A - 《关于我

 解题思路

 B - 在上厕所,

 解题思路

 D - 燕尾服


A - 《关于我

给你一个长度为 n(n≥3) 的正整数数组 a,该数组内除了一个数之外的所有数都相同 (例如数组 [4, 11, 4, 4] 除了 11 之外的所有数都等于 4).

输出不等于别的数的下标. 下标均从 1开始编号.

Input

第一行一个整数 t(1≤t≤100). 接下来有 t个测试样例.

每一个测试样例第一行是一个整数 n (3≤n≤100) — 数组 aa 的长度.

每个测试样例第二行有 nn 个整数a1​,a2​,…,an​ (1≤ai​≤100).

保证 a 中除了一个数外的所有数都相同.

Output

对于每个测试样例输出一个整数 — 不等于别的数的下标

Example

Input

Output

 解题思路:注意简化代码,避免时间超限

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

int main()
{
    int t,a[102],n;
    scanf ("%d",&t);//t为测试样例
    while (t--)
    {
        int cnt[102]={0};//用cnt数组来标记这个数出现的次数,设置初始值为0
                          注意初始值要紧跟其所在的循环
        scanf ("%d",&n);//n为数组长度
        for (int i=1;i<=n;i++)
        {
            scanf ("%d",&a[i]);
            cnt[a[i]]++;//输入时顺便标记,降低时间复杂度

        }
       for (int i=1;i<=n;i++)
      {
        if (cnt[a[i]]==1)
        {
               printf ("%d\n",i);//注意输出格式,要换行
                break;
        }
      }
    }
    return 0;
}

 B - 在上厕所,

OHgg 获得了一个大小等于 n×n 的正方形方阵,方针内有两个单元格被画上了星星,也就是被标记了. 这两个单元格可以在相同的位置(即同行同列).

他需要再给两个单元格画上星星,让这四个带星星的单元格表示为与坐标轴平行的矩形的四个角

例如,如果 n=4 并且这个矩阵看起来是这样的 (用星号标记了两个单元格)

那么他可以这样再多给两个单元格画上星星

如果有多个解决方案,输出任意一个都可以。

Input

第一行有一个整数 t (1≤t≤400). 接下来是 tt 个测试样例.

每个测试用例的第一行包含一个整数 n (2≤n≤400) — 矩阵的行和列的数量

接下来 nn 行分别包含 n个字符 '.' 或者 '*' 表示空单元格和标记单元格.

保证所有测试样例 n 的和不超过 400400.

保证矩阵上正好有两个星号。它们可以在同一行或同一列.

保证存在解决方案.

Output

对于每个测试样里,输出 nn 行,每行 nn 个字符 — 与输入内容相对应且带有四个星号的矩阵. 如果有多个正确答案输出任意一个即可.

Example

Input

Output

 解题思路

#include <bits/stdc++.h>
using namespace std;
char a[402][402];
int main()
{
    int t;
    cin>>t;
    while (t--)
    {
        int n;
        cin>>n;
        int x1,y1,x2,y2,cnt=0;
        getchar ();//防止换行被输入
        for (int i=1;i<=n;i++)
        {
            for (int j=1;j<=n;j++)
            {
                scanf ("%c",&a[i][j]);
                if (a[i][j]=='*'&&cnt<2)
                {
                    if (cnt==0)x1=i,y1=j;//x1,y1代表第一个星号的行列位置
                    else x2=i,y2=j;//x2,y2代表第二个
                    cnt++;
                }
            }
            getchar ();//防止换行符被输入
        }
        if (x1==x2)//行相等时
        {
            if (x1==n)a[1][y1]='*',a[1][y2]='*';//另外两个星号的列应该与其一致
            else a[x1+1][y1]='*',a[x1+1][y2]='*';//另外两个的行数随意~
        }
        else if (y1==y2)/列相等时
        {
            if (y1==n)a[x1][1]='*',a[x2][1]='*';
            else a[x1][y1+1]='*',a[x2][y1+1]='*';
        }
        else
        {
            a[x2][y1]='*';//另外两个星号的行列数固定啦~画图就可知
            a[x1][y2]='*';
        }
        for (int i=1;i<=n;i++)//输出
        {
            for (int j=1;j<=n;j++)
            cout <<a[i][j];
            cout<<endl;//记得换行哦,注意格式
        }
    }
    return 0;
}

 D - 燕尾服

OHgg 是一个情趣高雅的人,他经常和他的朋友们打扑克. 今天他们去了一个赌场,那里有 n 个玩家 (包括 OHgg 自己) 并且他们现在桌子上都有一些筹码. 他们第 i个人有 ai 的筹码.

每个人有任意次操作,每次操作都可以让自己的筹码数量 ×2 或 ×3. 如果所有人的筹码都可以变得相同,那么 OHgg 就赢了. OHgg 有可能赢吗?

Input

第一行一个正整数 n (2 ≤ n ≤ 10的5次方), 玩家的数量.

第二行有 n 个整数 a1, a2, ..., an (1 ≤ ai ≤ 10的9次方) — 玩家手里的筹码数量.

Output

如果所有玩家可以让手里的筹码数量相同,输出 "Yes" (不带引号) ,否则输出"No"

Examples

Input

Output

Input

Output

 Note

第一个样例中第一个和第三个玩家可以让自己手里的筹码乘两次 2, 第二个玩家可以乘一次 2 并且第四个玩家乘一次 2和一次 3.

可以看出第二个样例几个玩家无法让筹码相同.

解题思路:

将乘法转换为除法,如果各玩家最终能够x2,x3转化为相等的数,那么他们除2,除3的数也是相等的~

代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N =1e5+5;

int main()
{
    int n;
    int a[N];
    scanf ("%d",&n);
    for (int i=0;i<n;i++)
    {
        scanf ("%d",&a[i]);
        while (a[i]%2==0||a[i]%3==0)//如果a【i】是2,3的倍数
        {
            if (a[i]%2==0) a[i]/=2;
            else if (a[i]%3==0) a[i]/=3;
        }
    }
    int flag=0;
    for (int i=1;i<n;i++)
    {
        if (a[i]==a[i-1])
            continue;
        else
        {
            flag=1;
            break;
        }
    }
    if (flag==0) printf ("Yes\n");
    else printf ("No\n");
    return 0;
}
举报

相关推荐

2022年寒假训练赛第5场

翻译题寒假第一次周赛7

寒假训练1.17

寒假翻译题训练 2月18号

22寒假专题训练(2)1.15--B

寒假翻译题训练 2月14号

0 条评论