NOIP2013TGsolution

Posted Melacau----论一个蒟蒻的自我修养

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NOIP2013TGsolution相关的知识,希望对你有一定的参考价值。

D1T1:转圈游戏(circle)

题意:看题目。。

解题思路:快速幂求m*10^kmodn即可。

#include<stdio.h>
#define ll long long
#define For(i,a,b) for(int i=a; i<=b; i++)
#define Ford(i,a,b) for(int i=a; i>=b; i--)
#define File(fn) freopen(fn".in","r",stdin);freopen(fn".out","w",stdout);
int n,m,k,x;
inline int in(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<0||ch>9) f=ch==-?-1:1,ch=getchar();
    while(ch>=0&&ch<=9) x=x*10+ch-0,ch=getchar();
    return x*f;
}
inline void print(int x,char ch){
    if (!x){
        putchar(0);
        putchar(ch);
        return;
    }
    if (x<0){
        putchar(-);
        x*=-1;
    }
    char num[10];
    short cnt=0;
    while(x) num[++cnt]=x%10+0,x/=10;
    while(cnt) putchar(num[cnt--]);
    putchar(ch);
}
inline ll ksm(int a,int k){
    if (!k) return 1;
    if (!(k^1)) return a;
    ll t=ksm(a,k>>1)%n;
    t*=t;t%=n;
    if (k&1) t*=a;
    t%=n;
    return t;
}
int main(){
    n=in(),m=in(),k=in(),x=in();
    print((ksm(10,k)*m%n+x)%n,\n);
}

D1T2:火柴排队

题意:将一个数组中元素进行几次交换后使得这个数组的大小顺序与另一个数组相同。

解题思路:离散后排序求逆序对数。

#include<stdio.h>
#include<algorithm>
#define ll long long
#define For(i,a,b) for(int i=a; i<=b; i++)
#define Ford(i,a,b) for(int i=a; i>=b; i--)
#define File(fn) freopen(fn".in","r",stdin);freopen(fn".out","w",stdout);
#define mod 99999997
using namespace std;
struct zxy{
    int num,no;
}a[100001],b[100001];
int n,ans=0,c[100001],BIT[100001];
inline int in(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<0||ch>9) f=ch==-?-1:1,ch=getchar();
    while(ch>=0&&ch<=9) x=x*10+ch-0,ch=getchar();
    return x*f;
}
inline void print(int x,char ch){
    if (!x){
        putchar(0);
        putchar(ch);
        return;
    }
    if (x<0){
        putchar(-);
        x*=-1;
    }
    char num[10];
    short cnt=0;
    while(x) num[++cnt]=x%10+0,x/=10;
    while(cnt) putchar(num[cnt--]);
    putchar(ch);
}
bool cmp(zxy a,zxy b){
    return a.num<b.num;
}
void init(){
    n=in();
    For(i,1,n) a[i].num=in(),a[i].no=i;
    For(i,1,n) b[i].num=in(),b[i].no=i;
    sort(a+1,a+n+1,cmp);
    sort(b+1,b+n+1,cmp);
    For(i,1,n) c[b[i].no]=a[i].no;
}
inline int lowbit(int k){
    return k&(-k);
}
inline void update(int x,int ad){
    while(x<=n){
        BIT[x]+=ad;
        x+=lowbit(x);
    }
}
inline int query(int x){
    int sum=0;
    while(x){
        sum+=BIT[x];
        x-=lowbit(x);
    }
    return sum;
}
void solve(){
    For(i,1,n){
        update(c[i],1);
        ans+=(i-query(c[i]));
        ans%=mod;
    }
    print(ans,\n);
}
int main(){
    init();
    solve();
    return 0;
}

 

以上是关于NOIP2013TGsolution的主要内容,如果未能解决你的问题,请参考以下文章

NOIP2016TGsolution

NOIP2011TGsolution

NOIP 2013

洛谷 1967 NOIP2013 货车运输

NOIP2013 DAY2题解

noip2013——提高组——花匠(flower)