標籤: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:
- 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.
- 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:
- 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.
- 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:
- 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.
- 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