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;
}

  


快速切题 acdream手速赛(6)A-C的更多相关文章

  1. ACDream手速赛2

    地址:http://acdream.info/onecontest/1014   都是来自Codeforce上简单题.   A. Boy or Girl 简单字符串处理   B. Walking in ...

  2. Acdream手速赛7

    蛋疼啊,本次只做出了一道题目...渣爆了... 妈蛋,,卡题之夜..比赛结果是1道题,比赛完哗啦哗啦出4道题.. A acdream1191 Dragon Maze 题意: 给一个迷宫,给出入口坐标和 ...

  3. ACdream区域赛指导赛之手速赛系列(2)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/DaiHaoC83E15/article/details/26187183        回到作案现场 ...

  4. ACdream区域赛指导赛之手速赛系列(5) 题解

    A - Problem A Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submi ...

  5. ACdream区域赛指导赛之手速赛系列(7)

    A -Dragon Maze Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) Submi ...

  6. Contest - 2014 SWJTU ACM 手速测试赛(2014.10.31)

    题目列表: 2146 Problem A [手速]阔绰的Dim 2147 Problem B [手速]颓废的Dim 2148 Problem C [手速]我的滑板鞋 2149 Problem D [手 ...

  7. 手速太慢QAQ

    显然D是个细节题,但是还剩1h时看眼榜还没人过EF,只好冷静写D,大概思路是任何时候如果min(n,m)<=2,max(n,m)<=4暴搜,否则直接贪心是很对的,即第一步让S.T长度平均化 ...

  8. TCP数据接收及快速路径和慢速路径

    概述 tcp握手完成后,收到数据包后,调用路径为tcp_v4_rcv->tcp_v4_do_rcv->tcp_rcv_established在tcp_rcv_established中处理T ...

  9. 河南省acm第九届省赛--《表达式求值》--栈和后缀表达式的变形--手速题

    表达式求值 时间限制:1000 ms | 内存限制:65535 KB 难度:3   描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, ...

随机推荐

  1. openwrt如何单独编译uboot

    答:make package/boot/uboot-<chip series>/compile

  2. bootstrap的carousel图片轮播

    整个轮播是放在一个div .carousel和.slide的div中的, 包括3个部分: 1. 第一个部分indicator位于下方的指示器部分. 结构是一个ol和li, ol的类是carousel- ...

  3. 【TCP/IP详解 卷一:协议】第十七章 TCP:传输控制协议

    本章作为TCP的入门章节,简单的概述了一些TCP的知识,和TCP数据报的首部格式. TCP 最重要的特性:reliable. 17.1 引言 本章介绍的是 TCP为应用层提供的服务. 17.2 TCP ...

  4. jerichotab 初始化页面显示tab页中的第一个

    tab初始化默认显示第一个内容,但是tab标签显示最后一个. 源代码: $.fn.initJerichoTab({ renderTo: '#consumable', uniqueId: 'jerich ...

  5. NOI 4977 怪盗基德的滑翔翼(LIS)

    http://noi.openjudge.cn/ch0206/4977/ 描述: 怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯.而他最为突出的地方,就是他每次都能逃脱中村警部的重重围 ...

  6. JavaScript权威指南--脚本化CSS

    知识要点 客户端javascript程序员对CSS感兴趣的是因为样式可以通过脚本编程.脚本化css启用了一系列有趣的视觉效果.例如:可以创建动画让文档从右侧“滑入”.创造这些效果的javascript ...

  7. Java 常用对象-BigDecimal

    2017-11-02 22:03:14 BigDecimal类:不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成.如果为 ...

  8. 雷林鹏分享:C# 运算符重载

    C# 运算符重载 您可以重定义或重载 C# 中内置的运算符.因此,程序员也可以使用用户自定义类型的运算符.重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的.与其 ...

  9. 关于一致性hash详细

    一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单哈 ...

  10. 20170814xlVBA部分代号收盘价转置

    原始数据: 转置效果: Sub TransformData() Dim Rng As Range Dim Arr As Variant Dim Dic As Object Dim dCode As O ...