赞
踩
1.国王的遗产
X国是个小国。国王K有6个儿子。在临终前,K国王立下遗嘱:国王的一批牛作为遗产要分给他的6个儿子。
其中,大儿子分1/4,二儿子1/5,三儿子1/6,....
直到小儿子分1/9。
牛是活的,不能把一头牛切开分。
最后还剩下11头牛,分给管家。
请计算国王这批遗产中一共有多少头牛。
这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字)
2.神奇6位数(暴力+全排列)
有一个6位的正整数,它有个很神奇的性质:
分别用2 3 4 5 6去乘它,得到的仍然是6位数,并且乘积中所包含的数字与这个6位数完全一样!只不过是它们的顺序重新排列了而已。
请计算出这个6位数。
这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字)
- #include<cstdio>
- #include<iostream>
- #include<cstring>
- #include<algorithm>
- #include<queue>
- #include<stack>
- #include<set>
- #include<map>
- #include<vector>
- #include<cmath>
- const int maxn=1e5+5;
- typedef long long ll;
- using namespace std;
- int a[15]={0,1,2,3,4,5,6,7,8,9};
- int f(){
- int sum=0;
- sum+=a[0]*100000;
- sum+=a[1]*10000;
- sum+=a[2]*1000;
- sum+=a[3]*100;
- sum+=a[4]*10;
- sum+=a[5];
- return sum;
- }
- int vis[15];
- int vis2[15];
- int vis3[15];
- int vis4[15];
- int vis5[15];
- int vis6[15];
- int main(){
- do{
- memset(vis,0,sizeof(vis));
- memset(vis2,0,sizeof(vis2));
- memset(vis3,0,sizeof(vis3));
- memset(vis4,0,sizeof(vis4));
- memset(vis5,0,sizeof(vis5));
- memset(vis6,0,sizeof(vis6));
- int flag=1;
- int n1=f();
- while(n1){
- vis[n1%10]++;
- n1=n1/10;
- }
- sort(vis,vis+6);
- int n2=2*f();
- while(n2){
- vis2[n2%10]++;
- n2=n2/10;
- }
- sort(vis2,vis2+6);
- int n3=3*f();
- while(n3){
- vis3[n3%10]++;
- n3=n3/10;
- }
- sort(vis3,vis3+6);
- int n4=4*f();
- while(n4){
- vis4[n4%10]++;
- n4=n4/10;
- }
- sort(vis4,vis4+6);
- int n5=5*f();
- while(n5){
- vis5[n5%10]++;
- n5=n5/10;
- }
- sort(vis5,vis5+6);
- int n6=6*f();
- while(n6){
- vis6[n6%10]++;
- n6=n6/10;
- }
- sort(vis6,vis6+6);
- for(int i=0;i<6;i++){
- if(vis[i]!=vis2[i]){
- flag=0;
- break;
- }
- }
- for(int i=0;i<6;i++){
- if(vis[i]!=vis3[i]){
- flag=0;
- break;
- }
- }
- for(int i=0;i<6;i++){
- if(vis[i]!=vis4[i]){
- flag=0;
- break;
- }
- }
- for(int i=0;i<6;i++){
- if(vis[i]!=vis5[i]){
- flag=0;
- break;
- }
- }
- for(int i=0;i<6;i++){
- if(vis[i]!=vis6[i]){
- flag=0;
- break;
- }
- }
- if(flag&&a[0]!=0){
- cout<<f()<<endl;
- break;
- }
- }while(next_permutation(a,a+10));
- return 0;
- }
3.日期差
历史上,不同的人类聚居地可能有不同的历法,因而记录下来的资料中日期的换算就很麻烦。幸好今天我们统一使用公元纪年法。当然,这种历法对求两个日期差多少天也不是十分简便,但毕竟是可以忍受的。
下面的程序计算了两个日期的差值,两个日期都使用公元纪年法。
请分析程序逻辑,并推断划线部分缺失的代码。
int to_day(int y, int m, int d)
{
int mon[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int day = 0;
int i;
for(i=1; i<y; i++){
day += (i%4==0 && i%100!=0 || i%400==0)? 366 : 365;
}
if(y%4==0 && y%100!=0 || y%400==0) mon[2]++;
for(i=1; i<m; i++){
day+=mon[i]; //填空位置
}
return day + d;
}
int diff(int y1, int m1, int d1, int y2, int m2, int d2)
{
int a = to_day(y1, m1, d1);
int b = to_day(y2, m2, d2);
return b-a;
}
int main()
{
int n = diff(1864,12,31,1865,1,1);
printf("%d\n", n);
return 0;
}
注意:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字或已有符号)。
4.拼接平方数
小明发现49很有趣,首先,它是个平方数。它可以拆分为4和9,拆分出来的部分也是平方数。169也有这个性质,我们权且称它们为:拼接平方数。
100可拆分1 00,这有点勉强,我们规定,0 00 000 等都不算平方数。
小明想:还有哪些数字是这样的呢?
你的任务出现了:找到某个区间的所有拼接平方数。
【输入格式】
两个正整数 a b (a<b<10^6)
【输出格式】
若干行,每行一个正整数。表示所有的区间[a,b]中的拼接平方数
例如:
输入:
1 200
程序应该输出:
49
169
再例如:
输入:
169 10000
程序应该输出:
169
361
1225
1444
1681
3249
4225
4900
9025
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
5.套娃
作为 drd 送的生日礼物,atm 最近得到了一个俄罗斯娃娃。他对这个俄罗斯娃娃的构造很感兴趣。
俄罗斯娃娃是一层一层套起来的。假设:一个大小为 x 的俄罗斯娃娃里面可能会放任意多个大小小于 x 的俄罗斯娃娃(而市场上的套娃一般大娃里只能放一个小娃)。
drd 告诉 atm ,这个俄罗斯娃娃是由 n 个小娃娃组成的,它们的大小各不相同。 我们把这些小娃娃的大小从小到大依次记为 1 到 n 。
如果 atm 想观赏大小为 k 的小娃娃,他会先看这个小娃娃是否已经在桌子上了。 如果已经在桌子上,那么他就可以观赏了。否则他就打开桌子上某一个俄罗斯娃娃,将它套住的所有的小娃娃拿出来,摆在桌子上。
一开始桌子上只有 drd 送的大小为 n 的娃娃。注意,他只会将其中所有小娃娃拿出来,如果小娃娃里面还套着另外的小娃娃,他是不会将这些更里层的这些小娃娃拿出来的。
而且 atm 天生具有最优化的强迫症。他会最小化他所需要打开的娃娃的数目。
atm 是一个怪人。有时候他只想知道观看大小为 x 的娃娃时需要打开多少个娃娃(但并不去打开);有时候听 drd 说某个娃娃特别漂亮,于是他会打开看。现在请你输出他每次需要打开多少个娃娃。
【输入格式】
第一行两个数 n m ,表示娃娃的数目以及 atm 想看的娃娃的数目。
接下来 n - 1 行,每行两个数 u v,表示大小为 u 的娃娃里面套着一个大小为 v 的娃娃。保证 u > v 。
接下来 m 行,每行形如:
P x :表示 atm 一定要看到大小为 x 的娃娃;
Q x :表示 atm 只想知道为了看大小为 x 的娃娃,他需要打开多少个娃娃,但实际上并不打开他们。
【输出格式】
输出 m 行。对应输入中P操作或Q操作需要打开(或假想打开)多少个俄罗斯娃娃。
【样例输入】
5 5
5 3
5 4
3 2
3 1
Q 1
Q 4
P 2
Q 1
Q 4
【样例输出】
2
1
2
0
0
【数据范围】
对于 30% 的数据:n, m <= 1000
对于 100% 的数据:n, m <= 100000
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
6.重复模式
作为 drd 的好朋友,技术男 atm 在 drd 生日时送给他一个超长字符串 S 。atm 要 drd 在其中找出一个最长的字符串 T ,使得 T 在 S 中至少出现了两次,而他想说的秘密就藏在 T 中。
由于字符串实在是太长了,drd 总是找不到合适的 T 。于是 drd 请你帮他找到这个 T 的长度。
【输入格式】
一行。一个字符串,即题目中说的S 。
【输出格式】
一行。一个整数,表示最长的 T 的长度。
【样例输入】
ababa
【样例输出】
3
「数据范围」
对于 30% 的数据,S长度 <= 100
对于 60% 的数据,S长度 <= 8000
对于 100% 的数据,S长度 <= 500000
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
replace4.排列序数(全排列)
如果用a b c d这4个字母组成一个串,有4!=24种,如果把它们排个序,每个串都对应一个序号:
abcd 0
abdc 1
acbd 2
acdb 3
adbc 4
adcb 5
bacd 6
badc 7
bcad 8
bcda 9
bdac 10
bdca 11
cabd 12
cadb 13
cbad 14
cbda 15
cdab 16
cdba 17
...
现在有不多于10个两两不同的小写字母,给出它们组成的串,你能求出该串在所有排列中的序号吗?
【输入格式】
一行,一个串。
【输出格式】
一行,一个整数,表示该串在其字母所有排列生成的串中的序号。注意:最小的序号是0。
例如:
输入:
bdca
程序应该输出:
11
再例如:
输入:
cedab
程序应该输出:
70
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
数据不大,可以直接全排列
- #include<cstdio>
- #include<iostream>
- #include<cstring>
- #include<algorithm>
- #include<queue>
- #include<stack>
- #include<set>
- #include<map>
- #include<vector>
- #include<cmath>
- const int maxn=1e5+5;
- typedef long long ll;
- using namespace std;
- string pre[4000000];
- int main(){
- string s;
- cin>>s;
- int len=s.length() ;
- char a[len+1];
- for(int i=0;i<len;i++){
- a[i]=s[i];
- }
- sort(a,a+len);
- int l=0;
- do{
- for(int i=0;i<len;i++){
- pre[l]+=a[i];
- }
- l++;
- }while(next_permutation(a,a+len));
- for(int i=0;i<l;i++){
- if(pre[i]==s){
- printf("%d\n",i);
- break;
- }
- }
- return 0;
- }
replace5.幂一矩阵
天才少年的邻居 atm 最近学习了线性代数相关的理论,他对“矩阵”这个概念特别感兴趣。矩阵中有个概念叫做幂零矩阵。对于一个方阵 M ,如果存在一个正整数 k 满足 M^k = 0 ,那么 M 就是一个幂零矩阵。(^ 表示乘方)
atm 不满足幂零矩阵,他自己设想了一个幂一矩阵:对于一个方阵 M ,如果存在一个正整数 k 满足 M^k = I ,其中 I 是单位矩阵,那么 M 就是一个幂一矩阵。
atm 特别钟情于这样一种方阵:每行每列有且仅有一个 1 。经过 atm 不断实验,他发现这种矩阵都是幂一矩阵。
现在,他的问题是,给定一个满足以上条件的方阵,他想求最小的 k 是多少。
【输入格式】
第一行一个正整数 n ,表示矩阵大小是 n * n 。
接下来 n 行,每行两个正整数 i j 表示方阵的第 i 行第 j 列为 1。
1 <= i, j <= n 。
行号,列号都从1开始。
【输出格式】
一行。一个正整数,即题目中所说最小的 k 。
【样例输入】
5
3 1
1 2
4 4
2 3
5 5
【样例输出】
3
【数据范围】
对于 30% 的数据满足 n <= 10
对于 60% 的数据答案不超过 10^18
对于 100% 的数据满足 n <= 10000
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。