首页 > 代码库 > 【NOIP2013TG】solution
【NOIP2013TG】solution
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; }
【NOIP2013TG】solution
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。