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 510 10 6 6
Sample Output
YESNO
Source
BestCoder Round #11 (Div. 2)
Recommend
heyang | We have carefully selected several similar problems for you: 5053 5052 5051 5050 5049
題意:
給一個矩形區域告訴你它的長和寬。然后兩個坐標系。一個為左下角為原點。右上為正方向。一個右上角為原點。右下為正方向。現在給你一個坐標(x,y)問你在兩種坐標系中他們是不是表示同一個點。
思路:
把不同的坐標系轉換到同一坐標系就行了。我是把左上角轉換到右下角的。
詳細見代碼:
#include#include#include #include using namespace std;const int INF=0x3f3f3f3f;const int maxn=100010;typedef long long ll;int main(){ int n,m,x,y; while(~scanf("%d%d%d%d",&n,&m,&x,&y)) { if(x==n-x&&y==m-y) printf("YES\n"); else printf("NO\n"); } return 0;}
Bob and math problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 456 Accepted Submission(s): 169
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:
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
30 1 335 4 232 4 6
Sample Output
301425-1
Source
BestCoder Round #11 (Div. 2)
Recommend
heyang | We have carefully selected several similar problems for you: 5053 5052 5051 5050 5049
題意:給你n個數字要你組成 n位數的最大的一個奇數。不行就輸出-1.
思路:
開始讀錯題意了。以為輸出的不一定要用到所有數字。于是判完后就掛了。真搞不懂怎么過開始的數據的。。
這題貪心構造就行了。先找一個最小的奇數來做個位如果沒有的話就-1。然后把剩下的數排序。如果剩下的還有數字且最大的為0的話肯定輸出-1了。不是的話就按降序輸出在加上那會找的奇數就行了。
詳細見代碼:
#include#include#include #include using namespace std;const int INF=0x3f3f3f3f;const int maxn=100010;typedef long long ll;int arr[150],brr[150];int main(){ int n,i,p,ct; while(~scanf("%d",&n)) { ct=0,p=-1; for(i=0;i
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
3abc1abcabc1abcabc2
Sample Output
61521
Source
BestCoder Round #11 (Div. 2)
Recommend
heyang | We have carefully selected several similar problems for you: 5053 5052 5051 5050 5049
題意:給你一個長度不超過1e5由小寫組成的字符串。問你它有多少個子串。滿足子串的每個字符出現的次數都不超過k。
思路:
對于一個滿足條件的左端點le。把右端點ri的字符一個一個的加進去。如果還是滿足條件。這個新加進的字符將會貢獻ri-le+1個以該子符為右端點的子串。如果不滿足條件了就左移le指針知道滿足條件即可。比賽時早就想到思路了。可各種邏輯錯誤1小時+才1A。
詳細見代碼:
#include#include#include #include using namespace std;const int INF=0x3f3f3f3f;const int maxn=100002;typedef long long ll;char txt[maxn];int vis[27];ll ans=0;int main(){ int t,n,k,le,ri,p; scanf("%d",&t); while(t--) { scanf("%s%d",txt,&k); n=strlen(txt); ans=le=ri=0; memset(vis,0,sizeof vis); p=-1; while(ri<=n) { if(p==-1) { vis[txt[ri]-'a']++; if(vis[txt[ri]-'a']>k) p=ri; else if(ri
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
15 710 11 12 13 14Q 1 5 2 1Q 1 5 1 0Q 1 5 1 1Q 1 5 3 0Q 1 5 3 1S 1 100Q 1 5 3 1
Sample Output
511501
Source
BestCoder Round #11 (Div. 2)
Recommend
heyang | We have carefully selected several similar problems for you: 5053 5052 5051 5050 5049
題意:給你一個長度不超過1e5的數列。你可以進行兩種操作。
1.S x y。把第x個數變成y。
2.Q l r d p 。詢問[l,r]中數的第d個數字是p的有多少個。
思路:
看到這題。喜出望外。今天是可以ak的節奏啊。(不知道1002會掛。--||)。感覺典型線段樹的應用。每個節點一個數組val[rt][i][j]。表示節點代表的區間里第i個數字為j的有多少個。然后歡快的寫完了。寫完編譯運行一次通過。無任何錯誤和警告測樣例完全正確!然后愉快的交了。然后就mle了。。當時就傻了。一看題目內存限制。暈。居然有數據結構題目卡內存的。然后想了下樹狀數組開1e7空間就算是short也超了,但是想到了離線處理每一位的修改和詢問。但這時已經20:20。依稀的記得20:30就要開hack了。就放棄了掙扎了。后來醒悟后還是沒時間改了。雖然正解有我說的離線處理。但是總覺得還是蠻麻煩的就用分塊寫了。就是分成sqrt(n)塊。塊內直接暴力。塊間利用整塊信息維護快速算出答案。時間復雜度O(n*sqrt(n))。寫完一交居然rank1.估計O(10*n*log(n))的做法常數太大了。
詳細見代碼:
#include#include#include #include #include using namespace std;const int INF=0x3f3f3f3f;const int maxn=100003;typedef long long ll;#define lson L,mid,ls#define rson mid+1,R,rsint val[maxn][11],da[400][11][10],x;int main(){ int t,n,m,i,j,le,ri,d,p,x,y,bk,ans,st,ed,lim; char cmd[10]; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); bk=ceil(sqrt(1.0*n)); memset(da,0,sizeof da); memset(val,0,sizeof val); for(i=1;i<=n;i++) { scanf("%d",&x); for(j=1;j<=10;j++) { val[i][j]=x%10; x/=10; } p=(i-1)/bk; for(j=1;j<=10;j++) da[p][j][val[i][j]]++; } for(i=0;i
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com