Bestcoder 75 1001+1002

1001:

题意:

方法:最小公倍数。。我写的比较挫。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
#include <queue>
using namespace std;

int main()
{
    int T,n,m;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        int sum=0;
        while(1)
        {
            if(n==0||m==0)
            {
                break;
            }
            if(n>m)
            {
                sum+=n/m;
                n=n%m;
            }
            else if(m>n)
            {
                sum+=m/n;
                m=m%n;
            }
            else if(m==n)
            {
                sum++;
                m%=n;
            }
        }
        printf("%d
",sum);
    }
    return 0;
}

  

1002

题意:

解锁界面是一个 3 	imes 33×3 的正方形点阵,第一行的三个点标号 1, 2, 31,2,3,第二行的三个点标号 4, 5, 64,5,6,第三行的三个点标号 7, 8, 97,8,9。密码本身是一段序列,表示经过点的先后顺序,但遵循如下规则:

1. 密码至少经过四个点。

2. 不能重复经过同一个点。

3. 路径上的中间点不能跳过,除非已经被经过(34273427 是合法的,但 37243724 不合法)。

他想设置的密码的长度为正整数 k(1le kle 9)k(1k9),密码序列为 s_1 s_2...s_k(0le s_i < INT\_MAX)s1​​s2​​...sk​​(0si​​<INT_MAX),他想知道这个密码序列是否合法,这个问题交给了你。
输入描述
第一行一个整数表示测试组数:T(0 < Tle100000)T(0<T100000) 。

每组数据占一行,每行第一个数 kk,设置密码的长度;接着 kk 个正整数,之间用空格隔开,表示密码序列 s_1s_2...s_ks1​​s2​​...sk​​。
输出描述
TT 行。对每组数据,若合法输出 `valid`,否则输出 `invalid`。
输入样例
3
4 1 3 6 2
4 6 2 1 3
4 8 1 6 7
输出样例
invalid
valid
valid
Hint
对于第一组数据,11 到 33 跳过了路径上的点 22,所以不合法。

对于第二组数据,11 到 33 时点 22 已经被经过了,所以合法。

对于第三组数据,8
ightarrow 1 
ightarrow 6 
ightarrow 78167 路径均没有中间点,所以合法。

我真是花式懵逼。。。
日了狗了。。。
被hack了。。方法应该是没问题的,坑在输入的数据上了。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
#include <queue>
using namespace std;

int main()
{
    int T,n,m,vis[11][11],v[11];
    memset(vis,0,sizeof(vis));
    scanf("%d",&T);
    vis[1][3]=2;
    vis[1][7]=4;
    vis[1][9]=5;
    vis[2][8]=5;
    vis[3][7]=5;
    vis[3][9]=6;
    vis[4][6]=5;
    vis[6][4]=5;
    vis[7][1]=4;
    vis[7][9]=8;
    vis[7][3]=5;
    vis[8][2]=5;
    vis[9][1]=5;
    vis[9][7]=8;
    vis[9][3]=6;
    while(T--)
    {
        memset(v,0,sizeof(v));
        scanf("%d",&n);
        int f=0;
        if(n<1||n>9)
        {
            f=1;
        }
        for(int i=0; i<n; i++)
        {
            scanf("%d",&s[i]);
            if(s[i]<=0||s[i]>9)
            {
                f=1;
            }
            else
            {
                if(v[s[i]]==0)
                {
                    v[s[i]]=1;
                }
                else(v[s[i]]==1)
                {
                    f=1;
                }
            }
        }
        if(f==0)
        {
            memset(v,0,sizeof(v));
            for(int i=0; i<n-1; i++)
            {
                if(vis[s[i]][s[i+1]]==0)
                {
                    v[s[i]]=1;
                    v[s[i+1]]=1;
                }
                else if(v[vis[s[i]][s[i+1]]]==0)
                {
                    f=1;
                    break;
                }
            }
        }
        if(f==0)
        {
            printf("valid
");
        }
        else
        {
            printf("invalid
");
        }
    }
    return 0;
}


原文地址:https://www.cnblogs.com/qioalu/p/5270101.html