洛谷数论{水题}集合

1. P1327数列排序

题目描述

给定一个数列{an},这个数列满足ai≠aj(i≠j),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换?

输入输出格式

输入格式:

第一行,正整数n (n<=100,000)。

以下若干行,一共n个数,用空格分隔开,表示数列{an},任意-231<ai<231。

输出格式:

只有一行,包含一个数,表示最少的交换次数。

输入输出样例

输入样例#1:

8
8 23 4 16 77 -5 53 100

输出样例#1:

5

---------------------------------------------------------------------------------------------------------------本以为是逆序对,发现不一定相邻交换找一条交换链,从原位置到新位置不停地走,最终会是一个环注意每次加cnt-1,因为最后一次两个都到了正确位置代码实现原位置封装结构体,排序,flag代表归位,走就行了
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100005;

struct node{
    int o,w;
}a[N];
bool cmp(const node &a,const node &b){
    return a.w<b.w;
}
int n,flag[N],ans=0;    //guiwei
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i].w); a[i].o=i;
    }
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i++){
        if(flag[i]==0){
            int now=i,cnt=0;
            while(flag[now]==0){
                cnt++;
                flag[now]=1;
                now=a[now].o;
            }
            ans+=cnt-1;
        }
    }
    cout<<ans;
}
 2.P1630求和

题目描述

求1^b+2^b+……+a^b的和除以10000的余数。

输入输出格式

输入格式:

第一行包含一个正整数N,表示共有N组测试数据;

接下来N行,每行包含两个正整数a和b。

【数据规模】

对于30%的数据中,满足N<=10,a,b<=1000;

对于100%的数据中,满足N<=100,a,b<=1000000000;

输出格式:

共N行,每行一个对应的答案。

输入输出样例

输入样例#1:

1
2 3

输出样例#1:

9------------------------------------------------------------------------------------------暴力只能拿30分用f[i]表示i^b%10000的结果,考虑每个fi对答案的贡献即可复杂度O(10000*logb*N)不用long long也可以
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int MOD=10000,N=10005;
typedef long long ll;
int n;
ll a,b;
ll f[N];

ll powMod(ll a,ll b){
    ll ans=1;
    for(;b;b>>=1,a=(a*a)%MOD)
        if(b&1) ans=(ans*a)%MOD;
    return ans;
}
ll solve(ll a,ll b){
    for(int i=1;i<=MOD;i++)
        f[i]=powMod(i,b);
    ll div=a/MOD,mod=a%MOD;
    ll ans=0;
    for(int i=1;i<=MOD;i++){
        ans=(ans+div*f[i])%MOD;
        if(i<=mod) ans=(ans+f[i])%MOD;
    }
    return ans;
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        memset(f,0,sizeof(f));
        scanf("%lld%lld",&a,&b);
        cout<<solve(a,b)<<"\n";
    }
}
 3.P1403约数研究

题目描述

科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel2”的长时间运算成为了可能。由于在去年一年的辛苦工作取得了不错的成绩,小联允许用“Samuel2”进行数学研究。

小联最近在研究和约数有关的问题,他统计每个正数N的约数的个数,并以f(N)来表示。现在小联希望用“Samuel2”来统计f(1)到f(N)的累加和M。

f(n)表示n的约数个数,现在给出n,要求求出f(1)到f(n)的总和。

输入输出格式

输入格式:

输入一行,一个整数n

输出格式:

输出一个整数,表示总和

输入输出样例

输入样例#1:

3

输出样例#1:

5
------------------------------------一开始想用唯一分解加约数个数然和求和看到是求1~n,能不能像筛法那样,突然一想,考虑每个数的贡献不就是n/i,太水了,━━( ̄ー ̄*|||━━
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) ans+=n/i;
    cout<<ans;
} 

 
 
时间: 2024-10-12 04:23:42

洛谷数论{水题}集合的相关文章

BZOJ1968: [Ahoi2005]COMMON 约数研究(数论 水题)

Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input 3 Sample Output 5 Solve: 数论水题,求因数又不是质因数,所以,只要求出对于[1 , n]有多少个倍数,就表示[1 , n]中以i为因数的是哪些,加起来就可以了 Code: 1 #include <bits/stdc++.h> 2 using namespace std;

HDU 2674 N!Again (数论-水题)

N!Again Problem Description WhereIsHeroFrom:             Zty, what are you doing ? Zty:                                     I want to calculate N!...... WhereIsHeroFrom:             So easy! How big N is ? Zty:                                    1 <=

HDU 4143 A Simple Problem(数论-水题)

A Simple Problem Problem Description For a given positive integer n, please find the smallest positive integer x that we can find an integer y such that y^2 = n +x^2. Input The first line is an integer T, which is the the number of cases. Then T line

洛谷图论入门题--基本题必做 图-最短路径-1.信使(msner)

1 //带病打代码的我,心好累,脑子更累. 看到此代码的请给点个赞 ,谢谢. 2 //这个题还是比较简单的,用弗洛伊德完全就能过: 3 /*由衷的感谢江山,帮忙看程序的错误 , 4 5 ,--^----------,--------,-----,-------^--, 6 | ||||||||| `--------' | O 7 `+---------------------------^----------| 8 `\_,-------, _________________________|

AC自动机(附洛谷P3769模板题)

首先,介绍一下AC自动机(Aho-Corasick automaton),是一种在一个文本串中寻找每一个已给出的模式串的高效算法. 在学习AC自动机之前,你需要先学习Trie树和KMP算法,因为AC自动机正式利用并结合了两者的思想. 说到实际的不同,其实AC自动机只是在Trie树上引入了一个类似KMP中next数组的东西叫做Fail指针. 对于每一个节点,Fail指针指向该节点所代表的字符串中,次长的.在Trie树中存在的后缀(因为最长的在Trie树种存在的后缀就是其本身)所代表的节点. 举例:

HDU 3215 The first place of 2^n (数论-水题)

The first place of 2^n Problem Description LMY and YY are mathematics and number theory lovers. They like to find and solve interesting mathematic problems together. One day LMY calculates 2n one by one, n=0, 1, 2,- and writes the results on a sheet

洛谷 P1466 [USACO2.2]集合 Subset Sums

题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子集合的所有数字和是相等的: {3} 和 {1,2} 这是唯一一种分法(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数) 如果N=7,有四种方法能划分集合{1,2,3,4,5,6,7},每一种分法的子集合各数字和是相等的: {1,6,7} 和 {2,3,4,5} {注 1+6+7=2+3+4+5}

洛谷P3601签到题(欧拉函数)

题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 输入格式: 一行两个整数,l.r. 输出格式: 一行一个整数表示答案. 输入输出样例 输入样例#1: 233 2333 输出样例#1: 1056499 输入样例#2: 2333333333 2333666666 输出样例#2: 153096296 说明 对于30%的数据,. 对于60%的数据,.

hdu 1141 Factstone Benchmark 数论水题,,阶乘用斯特林公式

Factstone Benchmark Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1760    Accepted Submission(s): 973 Problem Description Amtel has announced that it will release a 128-bit computer chip by