1289 大鱼吃小鱼 1305 Pairwise Sum and Divide 1344 走格子 1347 旋转字符串 1381 硬币游戏

1289 大鱼吃小鱼

有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右。游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼。从左到右给出每条鱼的大小和游动的方向(0表示向左,1表示向右)。问足够长的时间之后,能剩下多少条鱼?

Input

第1行:1个数N,表示鱼的数量(1 <= N <= 100000)。
第2 - N + 1行:每行两个数A[i], B[i],中间用空格分隔,分别表示鱼的大小及游动的方向(1 <= A[i] <= 10^9,B[i] = 0 或 1,0表示向左,1表示向右)。

Output

输出1个数,表示最终剩下的鱼的数量。

Input示例

5
4 0
3 1
2 0
1 0
5 0

Output示例

2输入的先后顺序即为位置,可以以左边开始,就是如果向左游就和前面的向右游的鱼判断大小,如果没有就不要管它了(随它游吧),然后吃了的话总数减少。。。就好了。
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<iostream>
 5 #include<cstring>
 6 using namespace std;
 7
 8 const int NN=100007;
 9 int n,top,ans;
10 int a[NN];
11
12 int main()
13 {
14     scanf("%d",&n);
15     top=0,ans=0;
16     int x,y;
17     for (int i=1;i<=n;i++)
18     {
19         scanf("%d%d",&x,&y);
20         if (y==0)
21         {
22             for (;top>0;top--)
23                 if (x>a[top]) ans++;
24                 else
25                 {
26                     ans++;
27                     break;
28                 }
29         }
30         else a[++top]=x;
31     }
32     printf("%d\n",n-ans);
33 }

1305 Pairwise Sum and Divide

有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整:

fun(A)

sum = 0

for i = 1 to A.length

for j = i+1 to A.length

sum = sum + Floor((A[i]+A[j])/(A[i]*A[j]))

return sum

给出数组A,由你来计算fun(A)的结果。例如:A = {1, 4, 1},fun(A) = [5/4] + [2/1] + [5/4] = 1 + 2 + 1 = 4。

Input

第1行:1个数N,表示数组A的长度(1 <= N <= 100000)。
第2 - N + 1行:每行1个数A[i](1 <= A[i] <= 10^9)。

Output

输出fun(A)的计算结果。

Input示例

3
1 4 1

Output示例

4一开始还是去模拟了,发现超时,还去删除了一些头文件,真蠢,发现分母是相乘的那么向下取整,很快就为0了,排个序,找找单调性,就解决了。
 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4
 5 typedef long long LL;
 6 const int NN=100007;
 7
 8 int n;
 9 int a[NN];
10
11 int main()
12 {
13     scanf("%d",&n);
14     for (int i=1;i<=n;i++)
15         scanf("%d",&a[i]);
16     sort(a+1,a+n+1);
17     LL sum=0;
18     for (int i=1;i<=n;i++)
19         for (int j=i+1;j<=n;j++)
20         {
21             LL x=(LL)(a[i]+a[j])/((LL)a[i]*a[j]);
22             if (x==0) break;
23             sum=sum+x;
24         }
25     printf("%lld",sum);
26 }

1344 走格子

有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去。机器人有一个初始能量,每个格子对应一个整数A[i],表示这个格子的能量值。如果A[i] > 0,机器人走到这个格子能够获取A[i]个能量,如果A[i] < 0,走到这个格子需要消耗相应的能量,如果机器人的能量 < 0,就无法继续前进了。问机器人最少需要有多少初始能量,才能完成整个旅程。

例如:n = 5。{1,-2,-1,3,4} 最少需要2个初始能量,才能从1号走到5号格子。途中的能量变化如下3 1 0 3 7。

Input

第1行:1个数n,表示格子的数量。(1 <= n <= 50000)
第2 - n + 1行:每行1个数A[i],表示格子里的能量值(-1000000000 <= A[i] <= 1000000000)

Output

输出1个数,对应从1走到n最少需要多少初始能量。

Input示例

5
1
-2
-1
3
4

Output示例

2顺序下去,找一个最小负值就好了。
 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<cstdio>
 5 #include<cstring>
 6 using namespace std;
 7
 8 const long long INF=1e16+7;
 9
10 int main()
11 {
12     long long x=0,y,ans=INF;
13     int n;
14     scanf("%d",&n);
15     for (int i=1;i<=n;i++)
16     {
17         scanf("%lld",&y);
18         x+=y;
19         ans=min(ans,x);
20     }
21     if (ans<0) printf("%lld\n",abs(ans));
22     else printf("0\n");
23 } 

1347 旋转字符串

S[0...n-1]是一个长度为n的字符串,定义旋转函数Left(S)=S[1…n-1]+S[0].比如S=”abcd”,Left(S)=”bcda”.一个串是对串当且仅当这个串长度为偶数,前半段和后半段一样。比如”abcabc”是对串,”aabbcc”则不是。

现在问题是给定一个字符串,判断他是否可以由一个对串旋转任意次得到。

Input

第1行:给出一个字符串(字符串非空串,只包含小写字母,长度不超过1000000)

Output

对于每个测试用例,输出结果占一行,如果能,输出YES,否则输出NO。

Input示例

aa
ab

Output示例

YES
NO一开始一位hash去搞,后来不想打代码,花了60去看了别人代码,发现了一个规律,如果是对串旋转后也是具有对串性质,所以直接比较就好了。
#include <iostream>
#include <cstring>
using namespace std;
char str[1000005];
int main()
{
    while(cin>>str)
    {
        int flag=0;
        int len=strlen(str);
        if(len%2!=0)
        {
            cout<<"NO"<<endl;
            continue;
        }
        for(int i=0;i<len/2;i++)
        {
            if(str[i]!=str[i+len/2])
            {
                cout<<"NO"<<endl;
                flag=1;
                break;
            }
        }
        if(!flag)
            cout<<"YES"<<endl;
    }
    return 0;
}

1381 硬币游戏

有一个简单但是很有趣的游戏。在这个游戏中有一个硬币还有一张桌子,这张桌子上有很多平行线(如下图所示)。两条相邻平行线之间的距离是1,硬币的半径是R,然后我们来抛硬币到桌子上,抛下之后硬币有时候会和一些直线相交(相切的情况也算是相交),有时候不会。

请你来计算一下抛一次硬币之后,该硬币和直线相交数目的期望。

Input

第一行给出一个整数T,表示有T组数据(1<=T<=10000)。
第2行到T+1,每行给出一个整数R。(0< R <= 10,000,000,000)

Output

对于每一个数据,在一行中输出答案的整数部分即可。

Input示例

1
1

Output示例

2一开始看到期望吓傻,然后发现输入都是整数,发现乘2就可以了(不理解的花哥图看看就知道了)。
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<iostream>
 5 #include<cstring>
 6 using namespace std;
 7
 8 int n;
 9
10 int main()
11 {
12     scanf("%d",&n);
13     int x;
14     for (int i=1;i<=n;i++)
15     {
16         scanf("%d",&x);
17         printf("%d\n",x*2);
18     }
19 }
时间: 2024-10-14 05:36:55

1289 大鱼吃小鱼 1305 Pairwise Sum and Divide 1344 走格子 1347 旋转字符串 1381 硬币游戏的相关文章

51nod 1305 Pairwise Sum and Divide(数学分析题)

1305 Pairwise Sum and Divide 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 取消关注 有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整: fun(A) sum = 0 for i = 1 to A.length for j = i+1 to A.length sum = sum + Floor((A[i]+A[j])/(A[i]*A[j])) return sum

1305 Pairwise Sum and Divide(数学 ,规律)

HackerRank 1305 Pairwise Sum and Divide 有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整: fun(A) sum = 0 for i = 1 to A.length for j = i+1 to A.length sum = sum + Floor((A[i]+A[j])/(A[i]*A[j])) return sum 给出数组A,由你来计算fun(A)的结果.例如:A = {1, 4, 1},fun(A) = [5/4] + [2

1305 Pairwise Sum and Divide

基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整: fun(A) sum = 0 for i = 1 to A.length for j = i+1 to A.length sum = sum + Floor((A[i]+A[j])/(A[i]*A[j])) return sum 给出数组A,由你来计算fun(A)的结果.例如:A = {1, 4, 1},fun(A) = [5/4] + [

[51nod] 1305 Pairwise Sum and Divide 数学

有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整: fun(A) sum = 0 for i = 1 to A.length for j = i+1 to A.length sum = sum + Floor((A[i]+A[j])/(A[i]*A[j])) return sum 给出数组A,由你来计算fun(A)的结果.例如:A = {1, 4, 1},fun(A) = [5/4] + [2/1] + [5/4] = 1 + 2 + 1 = 4. Input 第1行:1

51Nod 1305 Pairwise Sum and Divide | 思维 数学

Output 输出fun(A)的计算结果. Input示例 3 1 4 1 Output示例 4 first try: #include "bits/stdc++.h" using namespace std; #define LL long long #define INF 0x3f3f3f3f3f #define PI acos(-1) #define N 100010 #define MOD 10 LL arr[N]; LL fun(int n){ LL sum=0; for(i

51nod1305 Pairwise Sum and Divide

题目链接:51nod 1305 Pairwise Sum and Divide 看完题我想都没想就直接暴力做了,AC后突然就反应过来了... Floor( (a+b)/(a*b) )=Floor( (1/b)+(1/a) ) 当a=1时:若b=1,则该式等于2,否则该式等于1 当a=b=2时:该式等于1 其余情况都等于0,所以只需要统计1和2的个数就行了. 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std;

51nod 1344 走格子(水题+贪心)

1344 走格子 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 取消关注 有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去.机器人有一个初始能量,每个格子对应一个整数A[i],表示这个格子的能量值.如果A[i] > 0,机器人走到这个格子能够获取A[i]个能量,如果A[i] < 0,走到这个格子需要消耗相应的能量,如果机器人的能量 < 0,就无法继续前进了.问机器人最少需要有多少初始能量,才能完成

51Nod 1344 走格子(贪心

1344 走格子 有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去.机器人有一个初始能量,每个格子对应一个整数A[i],表示这个格子的能量值.如果A[i] > 0,机器人走到这个格子能够获取A[i]个能量,如果A[i] < 0,走到这个格子需要消耗相应的能量,如果机器人的能量 < 0,就无法继续前进了.问机器人最少需要有多少初始能量,才能完成整个旅程. 例如:n = 5.{1,-2,-1,3,4} 最少需要2个初始能量,才能从1号走到5号格子.

1344 走格子

1344 走格子 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去.机器人有一个初始能量,每个格子对应一个整数A[i],表示这个格子的能量值.如果A[i] > 0,机器人走到这个格子能够获取A[i]个能量,如果A[i] < 0,走到这个格子需要消耗相应的能量,如果机器人的能量 < 0,就无法继续前进了.问机器人最少需要有多少初始能量,才能完成整个旅程. 例如:n