One day Dima and Alex had an argument about the price and quality of laptops. Dima thinks that the more expensive a laptop is, the better it is. Alex disagrees. Alex thinks that there are two laptops, such that the price of the first laptop is less (strictly smaller) than the price of the second laptop but the quality of the first laptop is higher (strictly greater) than the quality of the second laptop.
Please, check the guess of Alex. You are given descriptions of n laptops. Determine whether two described above laptops exist.
The first line contains an integer n (1 ≤ n ≤ 105) — the number of laptops.
Next n lines contain two integers each,ai andbi(1 ≤ ai, bi ≤ n), whereai is the price of thei-th laptop, and bi is the number that represents the quality of thei-th laptop (the larger the number is, the higher is the quality).
All ai are distinct. Allbi are distinct.
If Alex is correct, print "Happy Alex", otherwise print "Poor Alex" (without the quotes).
2 1 2 2 1
Happy Alex
WA了两遍~认真看题认真看题呀>.<
CODE:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <map>
const int inf=0xfffffff;
typedef long long ll;
using namespace std;
int n2[100005];
int n;
struct node
{
int n1;
int t;
}nn[100005];
bool cmp(node a,node b)
{
return a.n1<b.n1;
}
int work()
{
for(int i=0;i<n;i++){
if(nn[i].t!=n2[i]) return 0;
}
return 1;
}
int main()
{
//freopen("in.in","r",stdin);
while(~scanf("%d",&n)){
for(int i=0;i<n;i++){
scanf("%d %d",&nn[i].n1,&n2[i]);
nn[i].t=n2[i];
}
sort(nn,nn+n,cmp);
sort(n2,n2+n);
if(work()) printf("Poor Alex\n");
else printf("Happy Alex\n");
}
return 0;
}
Fedya studies in a gymnasium. Fedya's maths hometask is to calculate the following expression:
for given value of n. Fedya managed to complete the task. Can you? Note that given numbern can be extremely large (e.g. it can exceed any integer type of your programming language).
The single line contains a single integer n (0 ≤ n ≤ 10105). The number doesn't contain any leading zeroes.
Print the value of the expression without leading zeros.
4
4
124356983594583453458888889
0
Operation x mod y means taking remainder after divisionx by y.
Note to the first sample:
倒数第二个数是偶数的话,则最后一个数是0,4,8,则答案为4。若倒二是奇数的话,则最后一个数是2,6,则答案为4,其他都为0
CODE::
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <map>
const int inf=0xfffffff;
typedef long long ll;
using namespace std;
int t[2][5];
int test(int n,int tt)
{
int s=tt+2;
for(int i=0;i<s;i++){
if(n==t[tt][i]) return 4;
}
return 0;
}
int main()
{
string n;
t[1][0]=0,t[1][1]=4,t[1][2]=8;
t[0][0]=2,t[0][1]=6;
while(cin>>n){
//cout<<n<<endl;
int num=n[n.size()-1]-'0';
int n2;
if(n.size()==1) n2=0;
else n2=n[n.size()-2]-'0';
n2%=2;
printf("%d\n",test(num,1-n2));
}
return 0;
}
Alex doesn't like boredom. That's why whenever he gets bored, he comes up with games. One long winter evening he came up with a game and decided to play it.
Given a sequence a consisting of n integers. The player can make several steps. In a single step he can choose an element of the sequence (let's denote itak) and delete it, at that all elements equal toak + 1 andak - 1 also must be deleted from the sequence. That step bringsak points to the player.
Alex is a perfectionist, so he decided to get as many points as possible. Help him.
The first line contains integer n (1 ≤ n ≤ 105) that shows how many numbers are in Alex's sequence.
The second line contains n integers a1, a2, ...,an (1 ≤ ai ≤ 105).
Print a single integer — the maximum number of points that Alex can earn.
2 1 2
2
3 1 2 3
4
9 1 2 1 3 2 2 2 2 3
10
Consider the third test example. At first step we need to choose any element equal to2. After that step our sequence looks like this [2, 2, 2, 2]. Then we do 4 steps, on each step we choose any element equals to2. In total we earn 10 points.
dp 用一个数组将给的序列的数的个数记录下来,策略是选或者不选~
使用 long long.
CODE:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <map>
const int inf=0xfffffff;
typedef long long ll;
using namespace std;
const int Max=100005;
ll num[Max];
ll dp[Max];
int main()
{
//freopen("in.in","r",stdin);
int n;
while(~scanf("%d",&n)){
int a;
int maxn=-inf;
memset(num,0,sizeof(num));
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++){
scanf("%d",&a);
maxn=max(maxn,a);
num[a]++;
}
ll ans;
ans=dp[1]=num[1]*1;
for(int i=2;i<=maxn;i++){
dp[i]=max(dp[i-2]+num[i]*i,dp[i-1]);
ans=max(dp[i],ans);
}
printf("%I64d\n",ans);
}
return 0;
}