HDOJ5054 Alice and Bob

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 302    Accepted Submission(s): 229

Problem Description
Bob and Alice got separated in the Square, they agreed that if they get separated, they'll meet back at the coordinate point (x, y). Unfortunately they forgot to define the origin of coordinates and the coordinate axis direction. Now, Bob in the lower left
corner of the Square, Alice in the upper right corner of the the Square. Bob regards the lower left corner as the origin of coordinates, rightward for positive direction of axis X, upward for positive direction of axis Y. Alice regards the upper right corner
as the origin of coordinates, leftward for positive direction of axis X, downward for positive direction of axis Y. Assuming that Square is a rectangular, length and width size is N * M. As shown in the figure:




Bob and Alice with their own definition of the coordinate system respectively, went to the coordinate point (x, y). Can they meet with each other ? 

Note: Bob and Alice before reaching its destination, can not see each other because of some factors (such as buildings, time poor).
 
Input
There are multiple test cases. Please process till EOF. Each test case only contains four integers : N, M and x, y. The Square size is N * M, and meet in coordinate point (x, y). ( 0 < x < N <= 1000 , 0 < y < M <= 1000 ).
 
Output
If they can meet with each other, please output "YES". Otherwise, please output "NO".
 
Sample Input
10 10 5 5
10 10 6 6
 
Sample Output
YES
NO
 
Source
 

/**
* Created by ckboss on 14-10-3.
*/
import java.util.*; public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
int N=in.nextInt();
int M=in.nextInt();
int x=in.nextInt();
int y=in.nextInt();
if(x==N-x&&y==M-y)
System.out.println("YES");
else
System.out.println("NO");
}
}
}

HDOJ5055 Bob and math problem

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 812    Accepted Submission(s): 313

Problem Description
Recently, Bob has been thinking about a math problem.

There are N Digits, each digit is between 0 and 9. You need to use this N Digits to constitute an Integer.

This Integer needs to satisfy the following conditions:

  • 1. must be an odd Integer.
  • 2. there is no leading zero.
  • 3. find the biggest one which is satisfied 1, 2.

Example: 

There are three Digits: 0, 1, 3. It can constitute six number of Integers. Only "301", "103" is legal, while "130", "310", "013", "031" is illegal. The biggest one of odd Integer is "301".

 
Input
There are multiple test cases. Please process till EOF.

Each case starts with a line containing an integer N ( 1 <= N <= 100 ).

The second line contains N Digits which indicate the digit $a_1, a_2, a_3, \cdots, a_n. ( 0 \leq a_i \leq 9)$.
 
Output
The output of each test case of a line. If you can constitute an Integer which is satisfied above conditions, please output the biggest one. Otherwise, output "-1" instead.
 
Sample Input
3
0 1 3
3
5 4 2
3
2 4 6
 
Sample Output
301
425
-1
 
Source
 

/**
* Created by ckboss on 14-10-3.
*/
import java.util.*; public class Main { static int[] num = new int[10];
static char[] ans = new char[110];
static int nt;
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n;
while(in.hasNext()){
n=in.nextInt();
int flag=0;
int MinJ=111;
Arrays.fill(num,0); nt=0;
for(int i=0;i<n;i++){
int x=in.nextInt();
num[x]++;
if(x%2==1){
if(x<MinJ) MinJ=x;
flag++;
}
}
if(flag==0)
{
System.out.println("-1");
continue;
}
num[MinJ]--;
for(int i=9;i>=0;i--){
for(int j=num[i];j>0;j--){
ans[nt++]=(char)('0'+i);
}
}
ans[nt++]=(char)(MinJ+'0');
flag=0;
for(int i=0;i<nt;i++){
if(ans[i]=='0' && flag==0){
flag=0; break;
}
flag=1;
System.out.print(ans[i]);
}
if(flag==1)
System.out.println("");
else
System.out.println("-1");
}
}
}

HDOJ5056 Boring count

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 615    Accepted Submission(s): 242

Problem Description
You are given a string S consisting of lowercase letters, and your task is counting the number of substring that the number of each lowercase letter in the substring is no more than K.
 
Input
In the first line there is an integer T , indicates the number of test cases.

For each case, the first line contains a string which only consist of lowercase letters. The second line contains an integer K.



[Technical Specification]

1<=T<= 100

1 <= the length of S <= 100000

1 <= K <= 100000
 
Output
For each case, output a line contains the answer.
 
Sample Input
3
abc
1
abcabc
1
abcabc
2
 
Sample Output
6
15
21
 
Source
 

O(n)贪心...

/**
* Created by ckboss on 14-10-3.
*/
import java.util.*; public class Main { static long[] num = new long[30]; public static void main(String[] args){
Scanner in = new Scanner(System.in);
int T_T=in.nextInt();
while(T_T-->0){
String st=in.next();
int k=in.nextInt();
Arrays.fill(num,0);
int be=0,ed=0;
long ans=0;
for(int i=0,sz=st.length();i<sz;i++){
int id=(int)(st.charAt(i)-'a');
num[id]++;
if(num[id]>k){
for(;be<=ed;be++){
ans+=ed-be+1;
num[st.charAt(be)-'a']--;
if(st.charAt(be)-'a'==id) {
be++;
break;
}
}
}
ed=i;
}
for(;be<=ed;be++){
ans+=ed-be+1;
num[st.charAt(be)-'a']--;
}
System.out.println(ans);
}
}
}

HDOJ5057 Argestes and Sequence

Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 603    Accepted Submission(s): 152

Problem Description
Argestes has a lot of hobbies and likes solving query problems especially. One day Argestes came up with such a problem. You are given a sequence a consisting of N nonnegative integers, a[1],a[2],...,a[n].Then there are M operation on the sequence.An operation
can be one of the following:

S X Y: you should set the value of a[x] to y(in other words perform an assignment a[x]=y).

Q L R D P: among [L, R], L and R are the index of the sequence, how many numbers that the Dth digit of the numbers is P.

Note: The 1st digit of a number is the least significant digit.
 
Input
In the first line there is an integer T , indicates the number of test cases.

For each case, the first line contains two numbers N and M.The second line contains N integers, separated by space: a[1],a[2],...,a[n]—initial value of array elements.

Each of the next M lines begins with a character type.

If type==S,there will be two integers more in the line: X,Y.

If type==Q,there will be four integers more in the line: L R D P.



[Technical Specification]

1<=T<= 50

1<=N, M<=100000

0<=a[i]<=$2^{31}$ - 1

1<=X<=N

0<=Y<=$2^{31}$ - 1

1<=L<=R<=N

1<=D<=10

0<=P<=9
 
Output
For each operation Q, output a line contains the answer.
 
Sample Input
1
5 7
10 11 12 13 14
Q 1 5 2 1
Q 1 5 1 0
Q 1 5 1 1
Q 1 5 3 0
Q 1 5 3 1
S 1 100
Q 1 5 3 1
 
Sample Output
5
1
1
5
0
1
 
Source
 

分块大法好....

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath> using namespace std; const int maxn=100100; struct BLOCK
{
int cnt[10][10];
}block[400];
int block_size,block_num;
int n,m;
int a[maxn]; const int ten[12]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000}; void CHANGE(int p,int v)
{
int id=p/block_size;
int x=a[p];
for(int i=0;i<10;i++)
{
block[id].cnt[i][x%10]--;
x/=10;
}
a[p]=v;
x=v;
for(int i=0;i<10;i++)
{
block[id].cnt[i][x%10]++;
x/=10;
}
} int QUERY(int l,int r,int p,int d)
{
int L=l/block_size,R=r/block_size;
int ans=0;
if(R-L<=1)
{
for(int i=l;i<=r;i++)
{
ans+=((a[i]/ten[p-1])%10==d)?1:0;
}
return ans;
}
for(int i=l;i<(L+1)*block_size;i++)
{
ans+=((a[i]/ten[p-1])%10==d)?1:0;
}
for(int i=L+1;i<=R-1;i++)
{
ans+=block[i].cnt[p-1][d];
}
for(int i=R*block_size;i<=r;i++)
{
ans+=((a[i]/ten[p-1])%10==d)?1:0;
}
return ans;
} int main()
{
int T_T;
scanf("%d",&T_T);
while(T_T--)
{
scanf("%d%d",&n,&m);
memset(block,0,sizeof(block));
block_size=sqrt(n*1.0)+1;
block_num=n/block_size+1;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
int x=a[i];
int id=i/block_size;
for(int j=0;j<10;j++)
{
block[id].cnt[j][x%10]++;
x/=10;
}
}
while(m--)
{
char op[10];
int a,b,c,d;
scanf("%s",op);
if(op[0]=='Q')
{
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("%d\n",QUERY(a,b,c,d));
}
else if(op[0]=='S')
{
scanf("%d%d",&a,&b);
CHANGE(a,b);
}
}
}
return 0;
}

BestCoder Round #11 (Div. 2) 题解的更多相关文章

  1. BestCoder Round #11 (Div. 2) 前三题题解

    题目链接: huangjing hdu5054 Alice and Bob 思路: 就是(x,y)在两个參考系中的表示演全然一样.那么仅仅可能在这个矩形的中点.. 题目: Alice and Bob ...

  2. BestCoder Round #11 (Div. 2)

    太菜,仅仅能去Div2.(都做不完 ORZ... 各自是 HDU: 5054pid=5054"> Alice and Bob 5055Bob and math problem 5056 ...

  3. 喵哈哈村的魔法考试 Round #11 (Div.2) 题解

    喵哈哈村的星星与月亮(一) 打表发现答案就等于a*b%mod 注意a*b可能爆longlong #include<bits/stdc++.h> using namespace std; c ...

  4. BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)

    Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  5. BestCoder Round #68 (div.2) tree(hdu 5606)

    tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  6. hdu 5636 搜索 BestCoder Round #74 (div.2)

    Shortest Path  Accepts: 40  Submissions: 610  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: ...

  7. hdu5631 BestCoder Round #73 (div.2)

    Rikka with Graph  Accepts: 123  Submissions: 525  Time Limit: 2000/1000 MS (Java/Others)  Memory Lim ...

  8. hdu5630 BestCoder Round #73 (div.2)

    Rikka with Chess  Accepts: 393  Submissions: 548  Time Limit: 2000/1000 MS (Java/Others)  Memory Lim ...

  9. (BestCoder Round #64 (div.2))Array

    BestCoder Round #64 (div.2) Array 问题描述 Vicky是个热爱数学的魔法师,拥有复制创造的能力. 一开始他拥有一个数列{1}.每过一天,他将他当天的数列复制一遍,放在 ...

随机推荐

  1. [Android 4.4.4] 泛泰A870 通过刷第三版 Mokee4.4.4 KTU84P 20140626 RC2.1 by syhost

    主题及注意事项请访问以前的版本: http://blog.csdn.net/syhost/article/details/29931291 此RC2.1版比RC2.0改进的地方: 1. Mokee本身 ...

  2. shuffle一个简单的过程叙述性说明

    shuffle它是在map和reduce过程之间.我们看看在这个过程中的步骤,了解在这个问题上不深,有可能是一个错误.忘记修正 1. map map出口key,value,里的context.writ ...

  3. iOS如何兼容的应用程序32位系统和64Bit系统

    苹果发布iPhone5S时刻,64应用程序位去了眼前.当时我看到苹果公布的官方数据iOS7.x的SDK支撑64位应用程序.而内置的应用程序已经64位置. 我记得自己刚刚接触电脑时还有16位的系统,指针 ...

  4. css小技巧,如何制作一个箭头符号

    首先上图: 第一种方法大家可能想到了,就是用背景图片制作箭头符号,但是下面介绍的不是这种方法. 在介绍通过border制作箭头符号之前,先看下下面的css代码: <!DOCTYPE html&g ...

  5. 第一次QQ群视频教育有感

    标题:第一次QQ群视频教育有感 作者:丁又专, 时间:2014.08.16     教育的目的:启示学生心智,发现个人优势,激发探索欲望.     今天早上看到 中国大学MOOC<文献管理与信息 ...

  6. .Net async

    概述 先吐个槽,.NET的TPL框架,以及这篇文章想要表述的async await关键字,都是.NET语言层面本身支持的一种异步框架,代表其在编译时是可以最大化的被优化,作为内部DSL来说,.NET一 ...

  7. ER模型

    一.什么是ER模型 实体-联系图(Entity-RelationDiagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,形成一个独立于机器.独立于DBMS的ER图模型.通常将它简称为ER ...

  8. HDOJ 3480 Division

    斜率优化DP. ... 对数组排序后.dp[i][j]表示对前j个物品分i段的最少代价,dp[i][j]= min{ dp[i-1][k]+(a[k+1]-a[j])^2 }复杂度m*n^2     ...

  9. Linux内核分析(七)----并发与竞态

    原文:Linux内核分析(七)----并发与竞态 Linux内核分析(七) 这两天家里的事好多,我们今天继续接着上一次的内容学习,上次我们完善了字符设备控制方法,并深入分析了系统调用的实质,今天我们主 ...

  10. ThreadLocal可能引起的内存泄露(转)

    threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好 ...