快速切题 acdream手速赛(6)A-C
Sudoku Checker
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
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
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
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:
- 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
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的更多相关文章
- ACDream手速赛2
地址:http://acdream.info/onecontest/1014 都是来自Codeforce上简单题. A. Boy or Girl 简单字符串处理 B. Walking in ...
- Acdream手速赛7
蛋疼啊,本次只做出了一道题目...渣爆了... 妈蛋,,卡题之夜..比赛结果是1道题,比赛完哗啦哗啦出4道题.. A acdream1191 Dragon Maze 题意: 给一个迷宫,给出入口坐标和 ...
- ACdream区域赛指导赛之手速赛系列(2)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/DaiHaoC83E15/article/details/26187183 回到作案现场 ...
- ACdream区域赛指导赛之手速赛系列(5) 题解
A - Problem A Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submi ...
- ACdream区域赛指导赛之手速赛系列(7)
A -Dragon Maze Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) Submi ...
- Contest - 2014 SWJTU ACM 手速测试赛(2014.10.31)
题目列表: 2146 Problem A [手速]阔绰的Dim 2147 Problem B [手速]颓废的Dim 2148 Problem C [手速]我的滑板鞋 2149 Problem D [手 ...
- 手速太慢QAQ
显然D是个细节题,但是还剩1h时看眼榜还没人过EF,只好冷静写D,大概思路是任何时候如果min(n,m)<=2,max(n,m)<=4暴搜,否则直接贪心是很对的,即第一步让S.T长度平均化 ...
- TCP数据接收及快速路径和慢速路径
概述 tcp握手完成后,收到数据包后,调用路径为tcp_v4_rcv->tcp_v4_do_rcv->tcp_rcv_established在tcp_rcv_established中处理T ...
- 河南省acm第九届省赛--《表达式求值》--栈和后缀表达式的变形--手速题
表达式求值 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, ...
随机推荐
- Java中的三大框架分别有什么用
一.Spring Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯.Spring的架构基础是 ...
- JavaScript 小知识
1.var 变量 <script type="text/javascript"> var a = "hong"; var fun = functio ...
- 【Android实验】组件通信Intent
实验目的 [TOC] 了解使用Intent进行组件通信原理 掌握使用Intent启动Activity的方法 熟悉和掌握Android组件间通信的方式和技巧 实验要求 设计一个主Activity和一个子 ...
- K条最短路径算法(KSP, k-shortest pathes):Yen's Algorithm
参考: K最短路径算法之Yen's Algorithm Yen's algorithm 基于网络流量的SDN最短路径转发应用 K条最短路径算法:Yen's Algorithm 算法背景 K 最短路径问 ...
- 【TCP/IP详解 卷一:协议】第四章 ARP:地址解析协议 以及其他部分的一些知识
4.1 引言 数据链路 如以太网(Ethernet) 或者 令牌环网 都有自己的寻址机制(一般为 48 bit 的地址). 一个网络(数据链路层) 可以同时被多个不同的网络使用.比如,一组使用TCP/ ...
- HDU 6129 Just do it(杨辉三角)
http://acm.hdu.edu.cn/showproblem.php?pid=6129 题意: 给出数组a,并且bi=a1^a2^a3...^ai,并且现在会重复m次,求出最后的b数组. 思路: ...
- MVC ---- EF批处理
#region 批处理 ///<summary> ///两增一删一改 ///</summary> public void Save(){ //新增参一 Parameter pa ...
- python网络编程之TCP通信实例
一. server.py import socket host="localhost" port= s=socket.socket(socket.AF_INET,socket.SO ...
- shell 清空指定大小的日志文件
#!/bin/bash # 当/var/log/syslog大于68B时 if ! [ -f /var/log/syslog ] then echo "file not exist!&quo ...
- django 动态生成CSV文件
CSV (Comma Separated Values),以纯文本形式存储数字和文本数据的存储方式.纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样的数据.CSV文件由任意数目的记录组成,记 ...