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;
    }
    
  • 相关阅读:
    SpringCloudAlibaba学习笔记-简介
    SpringCloudAlibaba学习笔记-目录
    go语言学习笔记-目录
    go语言学习笔记-配置idea开发go编程语言并配置导入本地包
    go语言学习笔记-Windows10开发环境安装和环境变量配置
    我与阿里云的日常-QuickBI开发教程
    我与阿里云的日常-阿里云帐号注册
    消息队列 RabbitMq(6)高级特性
    消息队列 (5) RabbtMQ SpringBoot整合
    Nginx的安装和使用
  • 原文地址:https://www.cnblogs.com/MikuKnight/p/9895216.html
Copyright © 2011-2022 走看看