快速切題 acdream手速賽(6)A-C

來源:互聯網
上載者:User

標籤:des   blog   http   os   java   io   strong   ar   for   

Sudoku CheckerTime Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others)SubmitStatisticNext ProblemProblem 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
335 3 4 6 7 8 9 1 26 7 2 1 9 5 3 4 81 9 8 3 4 2 5 6 78 5 9 7 6 1 4 2 34 2 6 8 5 3 7 9 17 1 3 9 2 4 8 5 69 6 1 5 3 7 2 8 42 8 7 4 1 9 6 3 53 4 5 2 8 6 1 7 931 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 935 3 4 6 7 8 9 1 26 7 2 1 9 5 3 4 81 9 8 3 4 2 5 6 78 5 9 7 6 1 4 2 34 2 6 8 999 3 7 9 17 1 3 9 2 4 8 5 69 6 1 5 3 7 2 8 42 8 7 4 1 9 6 3 53 4 5 2 8 6 1 7 9
Sample Output
Case #1: YesCase #2: NoCase #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 NumberTime Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others)SubmitStatisticNext ProblemProblem 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.

OutputFor 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
315012233444 3-4-415012233444 3-3-512223 2-3
Sample Output
Case #1: one five zero one double two three three triple fourCase #2: one five zero one double two double three triple fourCase #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 TreeTime Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others)SubmitStatisticNext ProblemProblem 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
41 22 1 21 52 3 2
Sample Output
Case #1: 1 2Case #2: 2Case #3: 3 2Case #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;}

  



快速切題 acdream手速賽(6)A-C

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.