标签:des blog http os java io strong ar for
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:
You don‘t need to worry about the uniqueness of the problem. Just check if the given matrix is a valid solution.
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.
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.
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
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:
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.
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.
3 15012233444 3-4-4 15012233444 3-3-5 12223 2-3
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:
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:
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:
p and q are relatively prime.
1 ≤ n, p, q ≤ 264-1
p/q is an element in a tree with level number ≤ 64.
For each test case:
4 1 2 2 1 2 1 5 2 3 2
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; }
标签:des blog http os java io strong ar for
原文地址:http://www.cnblogs.com/xuesu/p/3945772.html