【数学】【模拟】XMU 1044 伪伪随机数产生器
2016-08-16 23:36
218 查看
题目链接:
[b][b][b]http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1044[/b][/b][/b]
题目大意:
求首项为0,公比为x的等差数列组成的数字条的第y位数字是几。(x,y<=2*109)
题目思路:
【数学】【模拟】
万万没想到这道题暴力我就过了。
0ms是计算在x为公差的情况下每位数会有几个数列中的数(例如x=3,369121518...一位数就有3个)
直接计算第y个数字是包含在几位数的等差数列中,是第几个数字。
暴力:
数学:
//
//by coolxxx
//
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<memory.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<stdbool.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define eps (1e-8)
#define J 10000000
#define MAX 0x7f7f7f7f
#define PI 3.1415926535897
#define N 104
using namespace std;
typedef long long LL;
LL cas,cass;
LL n,m,lll,ans;
LL s[24];
LL x;
int main()
{
#ifndef ONLINE_JUDGE
// freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
LL i,j;
// for(scanf("%d",&cas);cas;cas--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
// while(~scanf("%s",s))
while(~scanf("%lld",&n))
{
scanf("%lld",&m);
if(n==0)
{
puts("0");
continue;
}
for(i=1,x=10;i<19;i++,x*=10)
s[i]=(x-1)/n;
for(i=18;i>1;i--)
s[i]-=s[i-1];
for(i=1,x=0;i<19 && m>=s[i]*i;i++)
m-=s[i]*i,x+=s[i]*n;
x+=m/i*n;
if(m%i==0)
{
printf("%d\n",x%10);
continue;
}
x+=n;
i-=m%i;
while(i--)x/=10;
printf("%d\n",x%10);
}
return 0;
}
/*
//
//
*/
[b][b][b]http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1044[/b][/b][/b]
题目大意:
求首项为0,公比为x的等差数列组成的数字条的第y位数字是几。(x,y<=2*109)
题目思路:
【数学】【模拟】
万万没想到这道题暴力我就过了。
0ms是计算在x为公差的情况下每位数会有几个数列中的数(例如x=3,369121518...一位数就有3个)
直接计算第y个数字是包含在几位数的等差数列中,是第几个数字。
暴力:
// //by coolxxx // #include<iostream> #include<algorithm> #include<string> #include<iomanip> #include<memory.h> #include<time.h> #include<stdio.h> #include<stdlib.h> #include<string.h> //#include<stdbool.h> #include<math.h> #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) #define abs(a) ((a)>0?(a):(-(a))) #define lowbit(a) (a&(-a)) #define sqr(a) ((a)*(a)) #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b)) #define eps (1e-8) #define J 10000000 #define MAX 0x7f7f7f7f #define PI 3.1415926535897 #define N 104 using namespace std; typedef long long LL; int cas,cass; int n,m,lll,ans; LL sum; LL e ; int get(LL x) { int i=1; while(x>=e[i+1])i++; return i; } int main() { #ifndef ONLINE_JUDGE // freopen("1.txt","r",stdin); // freopen("2.txt","w",stdout); #endif int i,j; // for(scanf("%d",&cas);cas;cas--) // for(scanf("%d",&cas),cass=1;cass<=cas;cass++) // while(~scanf("%s",s)) e[0]=0,e[1]=1; for(i=2;i<=19;i++)e[i]=e[i-1]*10; while(~scanf("%d",&n)) { scanf("%d",&m); i=0; j=get(n); for(sum=n;i<m;sum+=n,i+=j) { if(sum>=e[j+1])j++; } sum-=n; if(i==m)printf("%d\n",sum%10); else { i=m-(i-j); printf("%d\n",sum/e[j-i+1]%10); } } return 0; } /* // // */
数学:
//
//by coolxxx
//
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<memory.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<stdbool.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define eps (1e-8)
#define J 10000000
#define MAX 0x7f7f7f7f
#define PI 3.1415926535897
#define N 104
using namespace std;
typedef long long LL;
LL cas,cass;
LL n,m,lll,ans;
LL s[24];
LL x;
int main()
{
#ifndef ONLINE_JUDGE
// freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
LL i,j;
// for(scanf("%d",&cas);cas;cas--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
// while(~scanf("%s",s))
while(~scanf("%lld",&n))
{
scanf("%lld",&m);
if(n==0)
{
puts("0");
continue;
}
for(i=1,x=10;i<19;i++,x*=10)
s[i]=(x-1)/n;
for(i=18;i>1;i--)
s[i]-=s[i-1];
for(i=1,x=0;i<19 && m>=s[i]*i;i++)
m-=s[i]*i,x+=s[i]*n;
x+=m/i*n;
if(m%i==0)
{
printf("%d\n",x%10);
continue;
}
x+=n;
i-=m%i;
while(i--)x/=10;
printf("%d\n",x%10);
}
return 0;
}
/*
//
//
*/
相关文章推荐
- 【数学】【模拟】XMU 1044 伪伪随机数产生器
- 厦门大学OJ 1044 伪伪随机数产生器
- XMU-1349-数学+模拟
- 模拟地图撒点,将随机产生的一些点以圆的形式画在画布上并保存为png格式的图片
- 计蒜客 腾讯手机地图(模拟 数学)
- 用C语言的rand()和srand()产生伪随机数的方法总结
- 最透彻的关于“随机数种子”和“伪随机数”的产生原理
- 有关rand(),srand()产生随机数学习总结
- 【CodeForces】702D - Road to Post Office 模拟,初中数学题
- ASP产生不重复的随机数(模拟洗牌)
- C语言产生伪随机数
- 【数学】XMU 1593 找数字
- 循环中产生伪随机数
- 用rand()和srand()产生伪随机数的方法总结
- 【模拟】XMU 1055 数七
- HDU4403-模拟、数学
- 模拟物理standby产生GAP的情形
- Codeforces Yandex.Algorithm 2011 Qualification 2 / 82A Double Cola (数学规律&模拟)
- CodeForces 1A Theatre Square(模拟+简单数学)
- 随机数种子”和“伪随机数”的产生原理