快速切题 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, ...
随机推荐
- SPOJ Prime or Not - 快速乘 - 快速幂
Given the number, you are to answer the question: "Is it prime?" Solutions to this problem ...
- JavaScript:Array属性方法
,,,,]; console.dir(arr); var pro=Object.getPrototypeOf(arr); console.dir(pro); 来一个个的查看数组的属性,方法 1.Arr ...
- Trailing Zeroes (III) (二分)题解
You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in d ...
- Bi-shoe and Phi-shoe(欧拉函数/素筛)题解
Bi-shoe and Phi-shoe Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe ...
- 【第十五章】 springboot + pojo默认值设置
我们有时需要给POJO设置默认值 pojo设置(推荐) 1.User package com.xxx.firstboot.domain; import lombok.Getter; import lo ...
- BZOJ5281: [Usaco2018 Open]Talent Show 01分数规划+01背包
Description FarmerJohn要带着他的N头奶牛,方便起见编号为1…N,到农业展览会上去,参加每年的达牛秀!他的第i头奶牛重 量为wi,才艺水平为ti,两者都是整数.在到达时,Farme ...
- hadoop项目实战--ETL--(三)实现mysql表到HIVE表的全量导入与增量导入
一 在HIVE中创建ETL数据库 ->create database etl; 二 在工程目录下新建MysqlToHive.py 和conf文件夹 在conf文件夹下新建如下文件,最后的工程目录 ...
- Select2下拉框总结
用了这么久的Select2插件,也该写篇文章总结总结.当初感觉Select2不是特别好用,但又找不到比它更好的下拉框插件. 在我的印象里Select2有2个版本,最新版本有一些新的特性,并且更新了一下 ...
- UVa 11572 唯一的雪花(滑动窗口)
https://vjudge.net/problem/UVA-11572 题意:输入一个长度为n的序列A,找到一个尽量长的连续子序列,使得该序列中没有相同的元素. 思路:很简单的题,也没啥好解释的了. ...
- C# 读取txt文件内容
if (!System.IO.File.Exists(@"E:\\111.txt")) { Console.Write("没有找到文件!"); } System ...