NOIP2013 提高组 复赛 day1 circle 转圈游戏
来源:互联网 发布:淘宝网店代销 编辑:程序博客网 时间:2024/05/22 03:19
NOIP2013 提高组 复赛 day1 circle 转圈游戏
1.题目读下来,惊呆了,这可是第一题啊。
2.进行模拟,弄明白了题意。
3.看了数据范围,好吧,本题第一目标30分。
4.开始编程,定了目标后,就比较简单了。
5.样例通过,第一次提交,得分0,原因:new_x=(x+m)%n;//此处new_x=x+m;得分0
6.马上进行修改,第二次提交,得分30,满意了。
30分的目标,此题耗时:10分钟即可。从整个考试来说,还是很划算的。
7.做题的时候感觉本题要用初等数论的取余的一些性质,目前还达不到这个水平。
8.有个疑问,提交时,是否能知道成绩,是否能提交多次,若能,是否要罚分。
9.突然想到,每次*10就取一次余,应该可以得到更多的分。提交,得分80,非常满意。
80分的目标,应该是编完其它程序再回过来做。
耗时:30分钟
10.剩下的20分,坚决不看解答,等能力到了,再回来做。要靠自己做出。
11.将80分代码中int 改成long long,得分90.
12.接下来,分数再也提不上了,搜索网络,发现---快速幂,看来不学新的东西,就无法AC。
13.好吧,坐下来,学学快速幂。
14.http://wenku.baidu.com/link?url=Cyhe-A3PtI8YD9xgNW3ss7kBQzQ3nGtUVZojX_QkRRonq3y7du4k3zsrpg7mfKqcqqM5UhiRqOQfaU-PXwwGtY60uichOq9y_F1HakD54Da文章写得不错,也就是为什么要用快速幂,分析得很透彻。
15.用快速幂编码,提交AC。
2017-1-24 22:01
16.快速幂的最大特点是算法时间复杂度从通常的o(n)降为o(logn),此类题型的最大问题,就是超时,TLE(Time Limit Exceeded)。
附上AC代码,编译环境Dev-C++4.9.9.2
//2013 circle2
//2013 circle
#include <stdio.h>
int main(){
long long n,m,k,x,new_x;
long long i;
long long circle=1;
long long a;
scanf("%lld%lld%lld%lld",&n,&m,&k,&x);
a=10;
a=a%n;
while(k>0){
if(k%2==1)
circle=(circle*a)%n;
k/=2;
a=(a*a)%n;
}
m=(m*circle)%n;
new_x=(x+m)%n;//此处new_x=x+m;得分0 ,修改后,得分30
printf("%lld\n",new_x);
return 0;
}
附上90分代码,编译环境Dev-C++4.9.9.2
//2013 circle2
//2013 circle
#include <stdio.h>
int main(){
long long n,m,k,x,new_x;
int i;
long long circle=1;
scanf("%lld%lld%lld%lld",&n,&m,&k,&x);
for(i=1;i<=k;i++){
circle*=10;
circle%=n;//每次取余
}
m=(m*circle)%n;
new_x=(x+m)%n;//此处new_x=x+m;得分0 ,修改后,得分30
printf("%lld\n",new_x);
return 0;
}
附上80分代码,编译环境Dev-C++4.9.9.2
//2013 circle
#include <stdio.h>
int main(){
int n,m,k,x,new_x;
int i;
int circle=1;
scanf("%d%d%d%d",&n,&m,&k,&x);
for(i=1;i<=k;i++){
circle*=10;
circle%=n;//每次取余
}
m=(m*circle)%n;
new_x=(x+m)%n;//此处new_x=x+m;得分0 ,修改后,得分30
printf("%d\n",new_x);
return 0;
}
附上30分代码,编译环境Dev-C++4.9.9.2
//2013 circle
#include <stdio.h>
int main(){
int n,m,k,x,new_x;
int i;
int circle=1;
scanf("%d%d%d%d",&n,&m,&k,&x);
for(i=1;i<=k;i++)
circle*=10;
circle%=n;
m=(m*circle)%n;
new_x=(x+m)%n;//此处new_x=x+m;得分0 ,修改后,得分30
printf("%d\n",new_x);
return 0;
}
- NOIP2013 提高组 复赛 day1 circle 转圈游戏
- NOIP2013复赛提高组day1(A:转圈游戏 B:火柴排队 C:货车运输)
- NOIP2013提高组复赛 转圈游戏 解题报告
- 7.11 noip2013提高组复赛day1
- NOIP2013/day1/1/转圈游戏
- noip2013提高组【Day1】·转圈游戏·题解+【快速幂】
- NOIP 提高组复赛 day1 国王游戏
- NOIP2013提高组Day1
- noip提高组day1 第一题 转圈游戏
- Noip2013 Day1 T1 转圈游戏(快速幂)
- NOIP2011 提高组 复赛 day1 mayan mayan游戏
- NOIP2012 提高组 复赛 day1 game 国王游戏 再见
- NOIP2013 转圈游戏
- 转圈游戏NOIP2013
- NOIP2013 转圈游戏
- NOIP2013转圈游戏
- noip2013转圈游戏
- NOIP2013 转圈游戏
- 面向对象的理解和使用
- 随机生成mysql数 填补为0的浏览量 下载量
- poj 2406 Power Strings
- jQuery之 .bind() 方法
- 从一个进度条看问题
- NOIP2013 提高组 复赛 day1 circle 转圈游戏
- linux中实现一个简单的进度条
- 人生中唯一的2016
- HTML基础知识(三)--文本格式标签
- 【Hibernate】——双向关联映射
- Layout获取焦点后,如何让子控件TextView产生走马灯效果?
- HDU_1495非常可乐(BFS)
- 数据结构与算法(C语言版)__堆排序
- (五)WebService之CXF和Spring整合