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. SPOJ SUBLEX 7258. Lexicographical Substring Search

    看起来像是普通的SAM+dfs...但SPOJ太慢了......倒腾了一个晚上不是WA 就是RE ..... 最后换SA写了...... Lexicographical Substring Searc ...

  2. iOS_38_手势

    Pan平移手势 终于效果图: Swipe轻扫手势 LongPress长按手势 Pinch和Rotation手势 捏合(缩放)和旋转 终于效果图: 涂鸦 终于效果图: 事件分3大类:触摸.加速计.远程遥 ...

  3. hdu 3076 ssworld VS DDD (概率dp)

    ///题意: /// A,B掷骰子,对于每一次点数大者胜,平为和,A先胜了m次A赢,B先胜了n次B赢. ///p1表示a赢,p2表示b赢,p=1-p1-p2表示平局 ///a赢得概率 比一次p1 两次 ...

  4. android 渐变drawable

    渐变Drawable它是使用<gradient>的标记的形状Drawable定义子节点的定义. 每个梯度Drawable求至少要有一个startColor和endColor属性,而且支持一 ...

  5. .Net反编译实战

    原文:.Net反编译实战 当你面对一个已经部署好的网站,功能,性能都非常不给力的时候,你会怎么办? 当你尝试去了解这个网站业务逻辑,代码逻辑和数据库逻辑时却发现根本没有任何资料时你会怎么办? 当你准备 ...

  6. 【 D3.js 入门系列 --- 10.2 】 你可以拖动地图

    我的个人博客是:www.ourd3js.com csdn博客为:blog.csdn.net/lzhlzz 转载请注明出处.谢谢. 本节是结合9.2节 和10节 的内容制作的一个可力学导向的中国地图,用 ...

  7. AngularJS 实现按需异步加载

    习惯了 seajs 的异步加载方式,也想着 angular 也能同样使用异步加载,但是事实不随人愿. angularjs 和 requirejs 一样,使用的是预先加载的方式组织模块(这和 seajs ...

  8. Rational Rose 2007使用小结

    1.Rose怎样隐藏类的属性和操作? 右击类,选Options->Suppress Attributes/Suppress Operations 2.Rose怎样表示类的约束? 在工具箱中选AB ...

  9. tomcat内存溢出,改动设置

    问题描写叙述: 1. java.lang.OutOfMemoryError: Java heap space JVM堆的设置是指java程序执行过程中JVM能够调配使用的内存空间的设置.JVM在启动的 ...

  10. JSP简单的练习-使用JDOM阅读xml文件

    <%@ page contentType="text/html; charset=gb2312" language="java" %> <%@ ...