牛客每日练习----Xieldy And His Password,直角三棱锥,消息列表

我喜欢给自己压力,必须得定一个很高的目标,逼自己朝着这个目标前进,不管会不会实现,都是一个动力。                                      ----喻言

链接:https://ac.nowcoder.com/acm/problem/15703
来源:牛客网
 

题目描述

众所周知,Xieldy最常用的口令是******。
为了改变这一现状,他random了一个01串,并从中截取了一段作为自己的口令。
他选择的口令满足以下条件:
1. 口令串表示的二进制数在十进制下可以被表示为3k(k>=0)。
2. 口令串可以有前导零。
现已经random出了01串,他想知道有多少种口令方案可以选择(不同的子段即为不同)。

输入描述:

若干组数据,每组数据仅一行01串s,表示random出来的的串,|s|<=1e6。

输出描述:

输出口令的方案数。

示例1

输入

复制

101010

输出

复制

5
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define PP pair
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
int const N=100000+10;
int const mod=1e9+7;
const int maxn=2e6+10;
char s[maxn];
ll sum[3],os,js,jg;
void init()
{
    memset(sum,0,sizeof(sum));
    sum[0]=1;
    jg=0;
    os=js=0;
}
int main()
{
    while (~scanf("%s",s))
    {
        init();
        ll cd=strlen(s);
        for(int i=0;i

链接:https://ac.nowcoder.com/acm/problem/15705
来源:牛客网
 

题目描述

在三维空间中,平面 x = 0, y = 0, z = 0,以及平面 x + y + z = K 围成了一个三棱锥。
整天与整数打交道的小明希望知道这个三棱锥内、上整点的数目。
他觉得数量可能很多,所以答案需要对给定的 M 取模。

输入描述:

输入有 1 ≤ T ≤ 105 组数据。
每组数据中,输入两个整数 0 ≤ K ≤ 109 + 7, 1 ≤ M ≤ 109 + 7,意义如题目描述。

输出描述:

对于每组数据,输出一个整数,为三棱锥内、上整点的数目对 M 取模。

示例1

输入

复制

4
0 60
1 60
29 60
29 100007

输出

复制

1
4
40
4960
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define PP pair
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
int const N=100000+10;
int const mod=1e9+7;
const int maxn=10000000+10;
int T;
ll k,m;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lld%lld",&k,&m);
        m*=6;
        printf("%lld\n",((k+1)*(k+2)%m*(k+3)%m)/6);
    }
    return 0;
}

链接:https://ac.nowcoder.com/acm/problem/15716
来源:牛客网
 

题目描述

当你的好友给你发来一条消息,你的消息列表上就会置顶显示该好友的名字以及该好友发给你的消息总数,换句话说,你的消息列表里的好友是按跟你发消息的时间进行排序的,给你发消息的时间离当前时间越近的好友将排到越前面。当然,你可能会手动置顶一些好友,那么其他的好友给你发消息时,他们的名字就只能在你手动置顶好友的后面再置顶了。如果消息被你查看或者忽略,又或者你把好友消息删除了,消息总数将重置为0。

根据用户的需求,有以下几个功能,需要你来实现:
(1)recv:收到一条好友消息,对于手动置顶好友的消息,将在“手动置顶好友列表”里置顶;对于其他好友的消息,将在“手动置顶好友列表”之下的消息列表里置顶,同时都需要显示该好友的消息总数。
(2)view:查看好友消息,将使该好友消息数变为0。
(3)up:手动置顶好友。
(4)down:取消手动置顶。
(5)delete:删除好友消息,这个操作将使该好友从消息列表中删除,同时取消对该好友的手动置顶(如果存在的话)。

假设初始消息列表为空,经过了一系列好友消息的操作之后,最终的消息列表将是怎么样的呢?

输入描述:

第一行输入一个整数T(表示样例个数)
接下来T组样例。
每组样例
第一行输入一个整数M,表示操作数(1≤M≤1000000);
接下来M行,
每行输入一个操作,由一个操作类型和一个好友id构成,之间以空格分开,操作类型如上面5个英文单词表示,
例如:“recv 123456”表示接收到id为123456的好友的一条消息,“delete 123456”表示在消息列表中删除 id 为123456的好友的消息记录。
为了简化问题,一开始消息列表为空并假设好友名字id由六位数字“唯一”标识(000000≤id≤999999),
题目保证输入数据的一致性。

输出描述:

每组样例,
输出最后的消息列表,自顶向下,每行输出一个:“好友id 消息数”。
每组样例后空一行。

示例1

输入

复制

1
13
recv 000001
recv 000002
up 000002
view 000001
recv 000002
recv 000004
up 000004
up 000001
recv 000004
recv 000003
view 000001
view 000004
down 000002

输出

复制

000004 0
000001 0
000003 1
000002 2
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define PP pair
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
int const N=100000+10;
int const mod=1e9+7;
const int maxn=10000000+10;

struct node
{
    int xh;
	int cz;
	int bh;
    bool fg;
}f[1000000];
bool cmp(node a,node b)
{
    if(a.fg!=b.fg) 
		return a.fg>b.fg;
    else 
		return a.bh>b.bh;
}
char s[1000];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,xh,ls=1;
        cin>>n;
        memset(f,0,sizeof(f));
        while(n--)
        {
            cin>>s>>xh;
            f[xh].xh=xh;
            if(s[0]=='r')
            {
                f[xh].cz++;
                f[xh].bh=ls++;
            }
            else if(s[0]=='v') 
				f[xh].cz=0;
            else if(s[0]=='u') 
				f[xh].fg=1;
            else if(s[1]=='o') 
				f[xh].fg=0;
            else if(s[2]=='l')
            {
                f[xh].cz=0;
                f[xh].bh=0;
                f[xh].fg=0;
            }
        }
        sort(f,f+1000000,cmp);
        for(int i=0;i<1000050;i++)
            if(f[i].bh!=0)
                printf("%06d %d\n",f[i].xh,f[i].cz);
        puts("");
    }
    return 0;
} 

你可能感兴趣的:(牛客网)