博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017-07-22 模拟赛
阅读量:5890 次
发布时间:2019-06-19

本文共 3702 字,大约阅读时间需要 12 分钟。

思路

对于一个数的后k位,在进行计算时,对他造成影响的只有后k位。由于给出的数据很大,所以我们再进行计算时算一次对算出的结果进行取模。这样我们就可以保证它不爆 long long 了                                                                                  还有在最后进行处理的时候要把每一个数都存在一个数组中,然后不够的补0

代码

#include
#include
#include
#include
#include
#define N 100001using namespace std;long long n,x,k,l,ans;long long a[N],b[N],c[14];long long read(){ long long x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9') {
if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();} return x*f;}long long pow(long long x,long long y){ long long sum=1; while(y) { if(y&1) sum=(sum*x)%k; x=(x*x)%k; y>>=1; } return sum;}int main(){ freopen("digits.in","r",stdin); freopen("digits.out","w",stdout); n=read(),k=read(); l=k;k=1; for(int i=1;i<=l;i++) k*=10; for(int i=1;i<=n;i++) a[i]=read()%k,b[i]=read(); x=read();x%=k; for(int i=1;i<=n;i++) ans=(ans+a[i]*pow(x,b[i])%k)%k; for(int i=l;i>=1;i--) c[i]=ans%10,ans/=10; for(int i=1;i<=l;i++) printf("%d\n",c[i]); return 0;}

 

思路:

这道题在考试的时候我用的暴力枚举做的30分的部分分

先看看这个代码??

#include
#include
#include
#include
#include
using namespace std;int n,x1,x2,x3,x4,x5,x6,ans;int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-') f=-1; ch=getchar();} while(ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();} return x*f;}int main(){ freopen("equation.in","r",stdin); freopen("equation.out","w",stdout); n=read(); x1=read(),x2=read(),x3=read(),x4=read(),x5=read(),x6=read(); for(int a=1;a<=n;a++) for(int b=1;b<=n;b++) for(int c=1;c<=n;c++) for(int d=1;d<=n;d++) for(int e=1;e<=n;e++) for(int f=1;f<=n;f++) if(x1*a-x2*b+x3*c-x4*d+x5*e-x6*f==0) ans++; printf("%d",ans); return 0;}

此时大佬像渣渣投来鄙视的眼神!(大佬:靠,这道题那么水你竟然只会部分分?!)

(⊙o⊙)…

好吧,来,大佬讲讲这答题吧....

大佬:哼,我讲就我讲!(鄙视。。。。)

我们来看这个题给出的方程:a1.x1-a2.x2+a3.x3-a4.x4+a5.x5-a6.x6=0

可以移项为a1.x1+a3.x3+a5.x5=a2.x2+a4.x4+a6.x6

然后我们用三个for循环来把等号前面的结果给记录下来。

然后再用三个for循环来判断等号后面的数是否和前面的数相等,这样我们就可以ac了!

(大佬再次投来鄙视的眼神。。)

渣渣表示无奈。。。。。

好了,来看看满分代码吧。

代码:

#include#include
#include
#include
#include
#include
using namespace std;int n,x1,x2,x3,x4,x5,x6,ans;map
ma;int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar();} while(ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();} return x*f;}int main(){ freopen("equation.in","r",stdin); freopen("equation.out","w",stdout); n=read(); x1=read(),x2=read(),x3=read(),x4=read(),x5=read(),x6=read(); for(int a=1;a<=n;a++) for(int b=1;b<=n;b++) for(int c=1;c<=n;c++) ma[x1*a+x3*b+x5*c]++; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) ans+=ma[x2*i+x4*j+x6*k]; printf("%d",ans); return 0;}

 

 思路:

我们在看着道题的时候,他让求最长路径最短。我们先sort一遍那么最长的路径一定就是最后走的了(为什么啊??大佬:白痴,都sort了,你说呢? 哼,白眼)我们在跑一边最小生成树不就好了吗??先把小的边加进去,那么最后到达终点的时候不就一定是最大的了吗??(恩,好像是。ORZ)

代码:

#include
#include
#include
#include
#include
#include
using namespace std;#define maxn 333444int if_z,tot,ans,n,m,k,x,y,z;int fa[maxn];bool flag;char Cget;struct Edge{ int l,r,w;}edge[maxn];int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar();} while(ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();} return x*f;}bool cmp(Edge a,Edge b){ return a.w

 

转载于:https://www.cnblogs.com/z360/p/7221779.html

你可能感兴趣的文章
23种设计模式-观察者模式
查看>>
【音乐分享】天后
查看>>
如何在手机上禁止浏览器的网页滚动
查看>>
li里包含左侧图片右侧文字自适应-------解决文字环绕图片的方法
查看>>
css3 的box-sizing属性理解
查看>>
PIN Block Formats – The Basics
查看>>
逆向工程,生成pojo、xml、mapper
查看>>
[Web 前端] qs.parse()、qs.stringify()使用方法
查看>>
[Web 前端] CSS 盒子模型,绝对定位和相对定位
查看>>
10.19 科大讯飞笔试小记
查看>>
黑客帝国、乱雨纷飞效果
查看>>
css水平垂直居中
查看>>
Charles设置抓取https请求
查看>>
Python Django 之 静态文件存放设置
查看>>
Android Zxing框架扫描解决扫描框大小,图片压缩问题
查看>>
swift学习之常量和变量
查看>>
面试中变相考算法复杂度
查看>>
Python_Day7_面向对象学习
查看>>
JS URL传值给servlet乱码
查看>>
集群时间同步
查看>>