zoukankan      html  css  js  c++  java
  • Wannafly挑战赛D绿魔*

    迭代器相关
    定义rbegin和rend要用逆向迭代器reverse_iterator
    不过auto只有c++11才能用TWT
    一个还挺好用的c++11编辑器

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+5;
    inline void read(int &x){
    	char c=getchar();x=0;
    	for(;!isdigit(c);c=getchar());
    	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
    }
    typedef long long ll;
    int n,num[N],top;
    std::vector<int>a[N];
    std::pair<int,int>sta[N];
    inline ll ksm(ll x,ll y,ll mo){
        ll res=1;
        for(;y;y>>=1,x=x*x%mo)if(y&1)res=res*x%mo;
        return res;
    }
    int main(){
    	read(n);
    	for(int i=1;i<=1e5;i++)
    		for(int t=100000/i,j=1;j<=t;j++)
    			a[i*j].push_back(i);
    	for(int x,k,p,i=1;i<=n;i++){
    		read(x),read(k),read(p);
    		ll ans=0;
    		for(vector<int>::iterator it=a[x].begin();it!=a[x].end();++it)++num[*it];
    		for(vector<int>::reverse_iterator it=a[x].rbegin();it!=a[x].rend();++it){
    			if(!num[*it])continue;
    			ans=(ans+num[*it]*ksm(*it,k,p))%p;
    			for(vector<int>::iterator pt=a[*it].begin();pt!=a[*it].end();++pt){
    				sta[++top]=make_pair(*pt,num[*it]),num[*pt]-=num[*it];
    			}
    		}
    		while(top){num[sta[top].first]+=sta[top].second;--top;}
    		printf("%lld
    ",ans);
    	}
    	return 0;
    }
    

    c++11

    #include<cstdio>
    #include<cctype>
    #include<vector>
    const int N=1e5+5;
    inline void read(int &x){
    	char c=getchar();x=0;
    	for(;!isdigit(c);c=getchar());
    	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
    }
    typedef long long ll;
    int n,num[N],top;
    std::vector<int>a[N];
    std::pair<int,int>sta[N];
    inline ll ksm(ll x,ll y,ll mo){
        ll res=1;
        for(;y;y>>=1,x=x*x%mo)if(y&1)res=res*x%mo;
        return res;
    }
    int main(){
    	read(n);
    	for(int i=1;i<=1e5;i++)
    		for(int t=100000/i,j=1;j<=t;j++)
    			a[i*j].push_back(i);
    	for(int x,k,p,i=1;i<=n;i++){
    		read(x),read(k),read(p);
    		ll ans=0;
    		for(auto it=a[x].begin();it!=a[x].end();++it)++num[*it];
    		for(auto it=a[x].rbegin();it!=a[x].rend();++it){
    			if(!num[*it])continue;
    			ans=(ans+num[*it]*ksm(*it,k,p))%p;
    			for(auto pt=a[*it].begin();pt!=a[*it].end();++pt){
    				sta[++top]=std::make_pair(*pt,num[*it]),num[*pt]-=num[*it];
    			}
    		}
    		while(top){num[sta[top].first]+=sta[top].second;--top;}
    		printf("%lld
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    Node.js 究竟是什么?
    天津自考学习之“六步看书法”
    C专家编程cdecl
    Linux系统启动流程及安装命令行版本
    Java学习路线
    GCC内置宏
    GMP
    二级存储构建倒排索引
    余弦距离与欧式距离
    af
  • 原文地址:https://www.cnblogs.com/MikuKnight/p/9895216.html
Copyright © 2011-2022 走看看