2014 ACM-ICPC Vietnam National Second Round

本文深入探讨了程序开发领域的核心内容,包括前端、后端、移动、游戏、大数据、开发工具等多个细分技术领域,提供了从理论到实践的全面指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

B. Sum

time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Write a program to compute the following sum S given a positive integer n:

, where  is the largest integer not greater than x.

Input

The input file consists of several datasets. The first line of the input file contains the number of datasets which is a positive integer and is not greater than 30. The following lines describe the datasets.

Each dataset contains a positive integer n (n ≤ 1012) written on a separate line.

Output

For each dataset, write in one line the remainder of the computed sum S divided by 106.

Sample test(s)
input
2
1
5
output
1
10

思路:发现[x/i]的不同的值很少, 于是可以分段进行。

D. Treasure Box
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Your team was exploring an ancient city. Suddenly you found an old scroll with 2 integer numbers N and K, which encrypts the secret code to open a treasure box. Considering a transformation on an integer X described as follows:

X = X + Xmod 100,

the secret code can be obtained by applying the above-described transformation K times successively to N.

Input

The input file consists of several datasets. The first line of the input file contains the number of datasets which is a positive integer and is not greater than 500.

Each dataset has two space-separated positive integers N and K (1 ≤ N ≤ 109, 1 ≤ K ≤ 109) written on a single line.

Output

For each dataset, write on a single line the secret number decrypted from N and K.

Sample test(s)
input
2
31102014 2
10101 10
output
31102056
10324

思路: X MOD 100 存在循环节。

 

E. ACM
time limit per test
9 seconds
memory limit per test
512 megabytes
input
standard input
output
standard output

An IT company puts out an advertisement to hire staff for a newly established office. They received n applications and organized an interview to select the best ones. They want to recruit candidates with both high level of expertise and good teamwork skill. Each candidate is assigned an ACM (Ability Coefficient of Multi-collectives) score that represents how the candidate meets the company’s internal selection criteria. Initially, everyone’s ACM score is 1.

Candidates are arranged into a round table of n seats, indexed from 1 to n. The first person sits next to the second person and the nthperson. For each interview question, candidates with indices from L and R form a group and register their collective answer to the system. If L ≤ R, the group consists of candidates at indices L, L + 1, L + 2, ..., R. If L > R, the group consists of candidates at indicesL, L + 1, ..., N, 1, ..., R. Depending on the answer, the ACM score of each group member is either multipled by X or divided by Y (in the later case, it is guaranteed that all ACM scores of the group are divisible by Y).

During the interview, the company may also request the system to output the product of the ACM scores of a group. This product could be a large number, so the system has to only output the value at modulo P. In summary, the system has to handle the following three types of queries:

  • L R P – compute the product of the ACM scores of all candidates from L to R, modulo P
  • L R X – the ACM score of each candidate from L to R is multiplied by X
  • L R Y – the ACM score of each candidate from L to R is divided by Y

For every query, we have 1 ≤ L, R ≤ N1 ≤ P ≤ 109 + 7, 1 ≤ X, Y ≤ 150.

Your task is to implement the system and output the computed products for every query of type 0.

Input

The input file consists of several datasets. The first line of the input file contains the number of datasets which is a positive integer and is not greater than 20. The following lines describe the datasets.

Each dataset comes in the following format:

  • The first line contains 2 integers n, m where n is the number of candidates and m is the number of queries to be processed(1 ≤ n, m ≤ 50000).
  • In the next m lines, the ith line contains the ith query.
Output

For each dataset, write out the corresponding outputs for queries of type 0 where each query output is on a separate line.

思路: 建立35课线段树,没课更新一个质因数的次幂。

#include <bits/stdc++.h>
#define LL long long

using namespace std;

struct node
{
    int l,r;
    LL sum,push;
};

const int X=150;
const int N=50010;

LL prime[35];
int pr;
node tree[35][N*4];

void init()
{
    pr=0;
    for (int i=2;i<=X;i++)
    {
        bool flag=true;
        for (int j=2;j<i;j++) if (i%j==0) flag=false;
        if (flag)
            prime[pr++]=i;
    }
}

void build(int idx, int t, int l, int r)
{
    tree[idx][t].l=l; tree[idx][t].r=r;
    tree[idx][t].sum=0; tree[idx][t].push=0;
    if (l==r) return;
    int mid=(l+r)/2;
    build(idx,t*2,l,mid);
    build(idx,t*2+1,mid+1,r);
}

void pushdown(int idx,int t)
{
    if (tree[idx][t].l!=tree[idx][t].r)
    {
        tree[idx][t*2].push+=tree[idx][t].push;
        tree[idx][t*2+1].push+=tree[idx][t].push;
        tree[idx][t*2].sum+=tree[idx][t].push*(tree[idx][t*2].r-tree[idx][t*2].l+1);
        tree[idx][t*2+1].sum+=tree[idx][t].push*(tree[idx][t*2+1].r-tree[idx][t*2+1].l+1);

        tree[idx][t].push=0;
    }
}

LL query(int idx, int t, int l, int r)
{
    if (l<=tree[idx][t].l&&tree[idx][t].r<=r)
    {
        return tree[idx][t].sum;
    }
    int mid=(tree[idx][t].l+tree[idx][t].r)/2;
    pushdown(idx,t);
    if (r<=mid)
        return query(idx,t*2,l,r);
    else
    if (l>mid)
        return query(idx,t*2+1,l,r);
    else
        return query(idx,t*2,l,mid)+query(idx,t*2+1,mid+1,r);
}

void update(int idx, int t, int l, int r, int x)
{
    if (l<=tree[idx][t].l&&tree[idx][t].r<=r)
    {
        tree[idx][t].push+=x;
        tree[idx][t].sum+=x*(tree[idx][t].r-tree[idx][t].l+1);
        return;
    }
    int mid=(tree[idx][t].l+tree[idx][t].r)/2;
    pushdown(idx,t);
    if (l<=mid)
        update(idx,t*2,l,r,x);
    if (r>mid)
        update(idx,t*2+1,l,r,x);

    tree[idx][t].sum=tree[idx][t*2].sum+tree[idx][t*2+1].sum;
}

LL multi(LL x, LL k,LL p)
{
    LL ans=1;
    x=x%p;
    while(k>0)
    {
        if(k%2==1) ans=(ans*x)%p;
        k=k/2;
        x=(x*x)%p;
    }
    return ans;
}

int main()
{
    int T,n,m,c,l,r;
    LL p;
    scanf("%d",&T);
    init();

    while(T--)
    {
        scanf("%d%d",&n,&m);
        for (int i=0;i<pr;i++) build(i,1,1,n);

        while(m--)
        {
            scanf("%d%d%d%I64d",&c,&l,&r,&p);
            if (c==0)
            {
                LL sum=1;
                for (int i=0;i<pr;i++)
                {
                    LL x=0;
                    if (l<=r) x=query(i,1,l,r); else x=query(i,1,l,n)+query(i,1,1,r);
                    sum=(sum*multi(prime[i],(LL)x,p))%p;
                }
                cout<<sum<<endl;
            }
            if (c==1)
            {
                for (int i=0;i<pr;i++) if (p%prime[i]==0)
                {
                    int x=0;
                    while(p%prime[i]==0) {x++; p=p/prime[i];}
                    if (l<=r) update(i,1,l,r,x); else {update(i,1,l,n,x); update(i,1,1,r,x);}
                }
            }
            if (c==2)
            {
                for (int i=0;i<pr;i++) if (p%prime[i]==0)
                {
                    int x=0;
                    while(p%prime[i]==0) {x++; p=p/prime[i];}
                    if (l<=r) update(i,1,l,r,-x); else {update(i,1,l,n,-x); update(i,1,1,r,-x);}
                }
            }
        }
    }
    return 0;
}

/*
2
6 5
0 1 5 1000000007
1 2 4 15
0 1 6 8704173
2 2 3 3
0 1 6 1000000007
6 6
1 1 4 20
1 2 6 15
0 1 6 9704331
2 3 6 5
0 1 4 1000000007
0 1 5 1000000007
*/

  

转载于:https://www.cnblogs.com/wzb-hust/p/4655627.html

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在现代军事领域,导弹的精确打击能力至关重要,而导弹的飞行轨迹直接影响其命中精度。为了深入研究导弹的飞行特性,本文通过 MATLAB 软件中的 Simulink 工具,对导弹的六自由度三维轨迹进行仿真分析。目标在惯性坐标系下进行匀速或变速机动,导弹采用比例导引法进行追踪。通过建立运动学与动力学模型,模拟导弹的飞行过程,旨在获取导弹的运动轨迹以及与目标的距离变化规律,为导弹的制导与控制研究提供理论支持与数据参考。 目标在惯性坐标系中按照设定的匀速或变速规律进行机动。其运动状态由位置、速度和加速度等参数描述,通过数学公式精确表达其在三维空间内的运动轨迹。匀速运动时,目标的速度保持恒定,位置随时间线性变化;变速运动时,引入加速度参数,使目标的运动更具复杂性和实战性。 导弹采用比例导引法进行制导。根据比例导引法的基本原理,导弹的加速度与目标与导弹之间的相对位置和相对速度成正比。结合导弹的运动学和动力学规律,建立导弹的六自由度运动模型。该模型考虑了导弹在三维空间内的平动和转动自由度,包括导弹的俯仰、偏航和滚转运动,以及相应的速度和加速度变化。通过运动学方程描述导弹的位置和姿态变化,动力学方程则考虑了导弹的推力、气动力和重力等因素对导弹运动的影响,从而全面刻画导弹的飞行特性。 在 MATLAB 的 Simulink 环境下,搭建仿真模型。将目标运动模型和导弹运动模型以模块化的方式进行组合,通过信号连接实现目标与导弹之间的信息交互。设置不同的初始条件,如目标和导弹的初始位置、速度、加速度等,以及比例导引法中的比例系数等参数。启动仿真后,Simulink 根据模型中的方程和参数,实时计算导弹和目标的运动状态,并以图形化的方式展示导弹的三维飞行轨迹以及导弹与目标之间的距离变化曲线。通过多次仿真,调整参数,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值