• 快速切题 acdream手速赛(6)AC


    Sudoku Checker

    Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others)

    Problem Description

    Sudoku is a popular single player game. The objective is to fill a 9x9 matrix with digits so that each column, each row, and all 9 non-overlapping 3x3 sub-matrices contain all of the digits from 1 through 9. Each 9x9 matrix is partially completed at the start of game play and typically has a unique solution.

          

    Given a completed N2×N2 Sudoku matrix, your task is to determine whether it is a valid solution.

    A valid solution must satisfy the following criteria:

    • Each row contains each number from 1 to N2, once each.
    • Each column contains each number from 1 to N2, once each.
    • Divide the N2×N2 matrix into N2 non-overlapping N×N sub-matrices. Each sub-matrix contains each number from 1 to N2, once each.

    You don't need to worry about the uniqueness of the problem. Just check if the given matrix is a valid solution.

    Input

    The first line of the input gives the number of test cases, T(1 ≤ T ≤ 100).

    T test cases follow. Each test case starts with an integer N(3 ≤ N ≤ 6).

    The next N2 lines describe a completed Sudoku solution, with each line contains exactly N2 integers.

    All input integers are positive and less than 1000.

    Output

    For each test case, output one line containing "Case #x: y", where x is the case number (starting from 1) and y is "Yes" (quotes for clarity only) if it is a valid solution, or "No" (quotes for clarity only) if it is invalid.

    Sample Input

    3
    3
    5 3 4 6 7 8 9 1 2
    6 7 2 1 9 5 3 4 8
    1 9 8 3 4 2 5 6 7
    8 5 9 7 6 1 4 2 3
    4 2 6 8 5 3 7 9 1
    7 1 3 9 2 4 8 5 6
    9 6 1 5 3 7 2 8 4
    2 8 7 4 1 9 6 3 5
    3 4 5 2 8 6 1 7 9
    3
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7 8 9
    3
    5 3 4 6 7 8 9 1 2
    6 7 2 1 9 5 3 4 8
    1 9 8 3 4 2 5 6 7
    8 5 9 7 6 1 4 2 3
    4 2 6 8 999 3 7 9 1
    7 1 3 9 2 4 8 5 6
    9 6 1 5 3 7 2 8 4
    2 8 7 4 1 9 6 3 5
    3 4 5 2 8 6 1 7 9

    Sample Output

    Case #1: Yes
    Case #2: No
    Case #3: No
    应用时:8min
    实际用时:12min
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int n;
    int bull[50][50];
    int col[50][50];
    int row[50][50];
    int calc(int i,int j){
        int ans=(i/n)*n+j/n;
        return ans;
    }
    int main(){
        int T;
        scanf("%d",&T);
        for(int ti=1;ti<=T;ti++){
            scanf("%d",&n);
            bool fl=false;
            memset(bull,0,sizeof(bull));
            memset(col,0,sizeof(col));
            memset(row,0,sizeof(row));
            for(int i=0;i<n*n;i++){
                for(int j=0;j<n*n;j++){
                    int tmp;
                    scanf("%d",&tmp);
                    if(tmp<1||tmp>n*n){
                        fl=true;
                        continue;
                    }
                    if(row[i][tmp]){
                        fl=true;
                    }
                    else row[i][tmp]=true;
                    if(col[j][tmp]){
                        fl=true;
                    }
                    else col[j][tmp]=true;
                    int bullnum=calc(i,j);
                    if(bull[bullnum][tmp]){
                        fl=true;
                    }
                    else {
                        bull[bullnum][tmp]=true;
                    }
                }
            }
            if(!fl)printf("Case #%d: Yes\n",ti);
            else printf("Case #%d: No\n",ti);
        }
        return 0;
    }
    

      B:

    Read Phone Number

    Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others)

    Problem Description

    Do you know how to read the phone numbers in English? Now let me tell you.

    For example, In China, the phone numbers are 11 digits, like: 15012233444. Someone divides the numbers into 3-4-4 format, i.e. 150 1223 3444. While someone divides the numbers into 3-3-5 format, i.e. 150 122 33444. Different formats lead to different ways to read these numbers:

    150 1223 3444 reads one five zero one double two three three triple four.

    150 122 33444 reads one five zero one double two double three triple four.

    Here comes the problem:

    Given a list of phone numbers and the dividing formats, output the right ways to read these numbers.

    Rules:

    Single numbers just read them separately.

    2 successive numbers use double.

    3 successive numbers use triple.

    4 successive numbers use quadruple.

    5 successive numbers use quintuple.

    6 successive numbers use sextuple.

    7 successive numbers use septuple.

    8 successive numbers use octuple.

    9 successive numbers use nonuple.

    10 successive numbers use decuple.

    More than 10 successive numbers read them all separately.

    Input

    The first line of the input gives the number of test cases, T(1 ≤ T ≤ 100).

    T test cases follow. Each line contains a phone number N(1 ≤ length of N ≤ 100) and the dividing format F, one or more positive integers separated by dashes (-), without leading zeros and whose sum always equals the number of digits in the phone number.

    Output

    For each test case, output one line containing "Case #x: y", where x is the case number (starting from 1) and y is the reading sentence in English whose words are separated by a space.

    Sample Input

    3
    15012233444 3-4-4
    15012233444 3-3-5
    12223 2-3

    Sample Output

    Case #1: one five zero one double two three three triple four
    Case #2: one five zero one double two double three triple four
    Case #3: one two double two three


    应用时:10min
    实际用时:48min
    WWWA
    原因1:没有弄清base是在前的
    2:s在应该稳定的过程中变化
    3:读取整数失误导致只能读取1位数字
    #include <string>
    #include <iostream>
    using namespace std;
    string base[11]={
        ""," double"," triple"," quadruple"," quintuple"," sextuple",
        " septuple"," octuple"," nonuple"," decuple",
    };
    string num[10]={
        " zero"," one"," two"," three"," four"," five"," six"," seven"," eight"," nine",
    };
    int read(string str,int &i){
        int ans=0;
        while(i<str.size()&&(str[i]>'9'||str[i]<'0'))i++;
        for(;i<str.size()&&str[i]<='9'&&str[i]>='0';i++){
            ans=ans*10+str[i]-'0';
        }
        return ans;
    }
    void change(string &ans){
        for(int i=0;i<ans.size();i++){
            if(ans[i]==' ')ans[i]='_';
        }
    }
    int main(){
        ios::sync_with_stdio(false);
        int T;
        cin>>T;
        for(int ti=1;ti<=T;ti++){
            string ans="",aim,format;
            cin>>aim>>format;
            int s=0,llen;
            int ind=0;
            while(llen=read(format,ind)){
                char fch=aim[s];
                int clen=0;
                for(int j=0;j<llen;j++){
                    if(aim[j+s]==fch){
                        clen++;
                    }
                    else {
                        if(clen<11){
                            ans=ans+base[clen-1]+num[fch-'0'];
                        }
                        else {
                            while(clen--)ans=ans+num[fch-'0'];
                        }
                        clen=1;
                    }
                    fch=aim[s+j];
                }
                s+=llen;
                if(clen<11){
                    ans+=base[clen-1]+num[fch-'0'];
                }
                else {
                    while(clen--)ans+=num[fch-'0'];
                }
            }
            cout<<"Case "<<"#"<<ti<<":"<<ans<<endl;
        }
        return 0;
    }
    

      C:

    Rational Number Tree

    Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others)

    Problem Description

    Consider an infinite complete binary tree where the root node is 1/1 and left and right childs of node p/q are p/(p+q) and (p+q)/q, respectively. This tree looks like:

             1/1
        ______|______
        |           |
       1/2         2/1
     ___|___     ___|___
     |     |     |     |
    1/3   3/2   2/3   3/1
    ...

    It is known that every positive rational number appears exactly once in this tree. A level-order traversal of the tree results in the following array:

    1/1, 1/2, 2/1, 1/3, 3/2, 2/3, 3/1, ...

    Please solve the following two questions:

    1. Find the n-th element of the array, where n starts from 1. For example, for the input 2, the correct output is 1/2.
    2. Given p/q, find its position in the array. As an example, the input 1/2 results in the output 2.

    Input

    The first line of the input gives the number of test cases, T(1 ≤ T ≤ 100).

    T test cases follow. Each test case consists of one line.

    The line contains a problem id (1 or 2) and one or two additional integers:

    1. If the problem id is 1, then only one integer n is given, and you are expected to find the n-th element of the array.
    2. If the problem id is 2, then two integers p and q are given, and you are expected to find the position of p/q in the array.

    p and q are relatively prime.

    1 ≤ n, p, q ≤ 264-1

    p/q is an element in a tree with level number ≤ 64.

    Output

    For each test case:

    1. If the problem id is 1, then output one line containing "Case #x: p q", where x is the case number (starting from 1), and p, q are numerator and denominator of the asked array element, respectively.
    2. If the problem id is 2, then output one line containing "Case #x: n", where x is the case number (starting from 1), and n is the position of the given number.

    Sample Input

    4
    1 2
    2 1 2
    1 5
    2 3 2

    Sample Output

    Case #1: 1 2
    Case #2: 2
    Case #3: 3 2
    Case #4: 5

    应用时:15min
    实际用时:62min
    WWWWWWA
    错误原因:
    1:直接取反不相当于逆序
    2:unsigned long long,恰取到64而不是在63内
    3:unsigned long long 应当用%llu而不是%llud输出
    #include <cstdio>
    #include <cstring>
    using namespace std;
    typedef unsigned long long ll;
    int bit[66],blen;
    ll n,p,q;
    void divide(ll tn){
        blen=0;
        while(tn>0){
            bit[blen++]=tn&1;
            tn>>=1;
        }
    }
    void calc1(){
        p=1,q=1;
        for(int i=blen-2;i>=0;i--){
            if(bit[i]){
                p=p+q;
            }
            else{
                q=p+q;
            }
        }
    }
    void calc2(){
        n=1;
        blen=0;
        while(p!=q){
            if(p>q){
                p-=q;
                bit[blen++]=1;
            }
            else{
                q-=p;
                bit[blen++]=0;
            }
        }
        for(int i=blen-1;i>=0;i--){
            n<<=1;
            n+=bit[i];
        }
    }
    int main(){
        int T;
        scanf("%d",&T);
        for(int ti=1;ti<=T;ti++){
            int op;
            blen=0;
            memset(bit,0,sizeof(bit));
            scanf("%d",&op);
            if(op==1){
                scanf("%llu",&n);
                divide(n);
                calc1();
                printf("Case #%d: %llu %llu\n",ti,p,q);
            }
            else {
                scanf("%llu%llu",&p,&q);
                calc2();
                printf("Case #%d: %llu\n",ti,n);
            }
        }
        return 0;
    }
    

      



  • 相关阅读:
    vb做界面调用c编写的dll
    小记管线冲洗(现场学习)
    管网建模基础
    编写成绩信息管理系统
    MJRefresh超详细讲解
    iOS 在xib或者storyboard中添加AutoLayout后,在代码中修改AutoLayout约束条件
    tableViewCell重用导致图片错乱问题
    更新ruby
    控件基本动画
    Block动画和spring动画
  • 原文地址:https://www.cnblogs.com/xuesu/p/3945772.html
Copyright © 2020-2023  润新知