标题:国王的遗产

X国是个小国。国王K有6个儿子。在临终前,K国王立下遗嘱:国王的一批牛作为遗产要分给他的6个儿子。
其中,大儿子分1/4,二儿子1/5,三儿子1/6,....
直到小儿子分1/9。
牛是活的,不能把一头牛切开分。

最后还剩下11头牛,分给管家。

请计算国王这批遗产中一共有多少头牛。

这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字)
#include <bits/stdc++.h>

/**
@author:d g w
*/
using namespace std;
typedef long long LL ;

const LL maxn=1000000;

int main(){

for(int x=1;x<5000;x++){
int temp=x/4+x/5+x/6+x/7+x/8+x/9;
if(temp+11==x&&x%4==0&&x%5==0&&x%6==0&&x%7==0&&x%8==0&&x%9==0){
cout<<x<< " ";
}

}
return 0;
}

标题:神奇6位数

有一个6位的正整数,它有个很神奇的性质:

分别用2 3 4 5 6去乘它,得到的仍然是6位数,并且乘积中所包含的数字与这个6位数完全一样!只不过是它们的顺序重新排列了而已。

请计算出这个6位数。

这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字)

  • 看到很多都是枚举解法,我是使用的排列

枚举解法


#include<stdio.h>
#include<string.h>
int flag[10];
int val[10];
int main()
{
int check=0 ,i=100000,count=0;
memset(flag,0,sizeof(flag));
while(i<=200000) //因为200000*6超过了6位数,粗略的减少一点数据
{
i++;
int temp=i;
memset(flag,0,sizeof(flag));
while(temp)
{
flag[temp%10]++;
temp/=10;
}
int bb=true;
for(int j=2;j<=6;j++)
{
int temp2=i*j;
memcpy(val,flag,sizeof(flag));
while(temp2)
{
val[temp2%10]--;
temp2/=10;
}
for(int k=0;k<10;k++)
{
if(val[k]!=0)
bb=false;
}
}
if(bb==true)
printf("%d\n",i);
}
return 0;
}

我的排列解法


#include <bits/stdc++.h>

/**
@author:d g w
*/
using namespace std;
typedef long long LL ;

const LL maxn=1000000;

int b[7];
int c[7];
void getnum(int y){
int i=0;
do{
b[i++]=y%10;
y/=10;
}while(y!=0);
//cout<<b[0]<<b[1]<<b[2]<<b[3]<<b[4]<<b[5]<<endl;
}

int main(){

int a[]={1,2,3,4,5,6,7,8,9};
do{
int x=a[0]*100000+a[1]*10000+a[2]*1000+a[3]*100+a[4]*10+a[5];
//2 3 4 5 6
int ans=0;
for(int i=2;i<=6;i++){
int y=x*i;
int flag=true;
getnum(y);
c[0]=a[0]; c[1]=a[1]; c[2]=a[2]; c[3]=a[3]; c[4]=a[4]; c[5]=a[5];
sort(b,b+6);sort(c,c+6);
for(int i=0;i<6;i++){
if(b[i]!=c[i]){
flag=false;
}
}
if(flag){
ans++;
}
}
if(ans==5){
cout<<x;
}
}while(next_permutation(a,a+9));
return 0;
}


重复模式

标题:重复模式

作为 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 , 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

#include <bits/stdc++.h>

/**
@author:d g w
*/
using namespace std;
typedef long long LL ;

const LL maxn=1000000;

char s[1000];

bool finds(string s,string c){
int j = 0;
for(int i=0;i<s.length();i++){
if(j == 0 && (s.length()-i)<c.length())
return false;
if(s[i]== c[j]){
j++;
if(j == c.length())
return true;
}else{
j = 0;
}
}
return false;

}
int main(){
string s;
cin>>s;
int max=0;
for(int i=0;i<s.length()-1;i++){
for(int j=1;j<=s.length()-i;j++){
if(finds(s.substr(i+1),s.substr(i,i+j))){
max=j>max?j:max;
}
}
}
cout<<max;
return 0;
}



套娃

标题:套娃

作为 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 , 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

#include <bits/stdc++.h>

/**
@author:d g w
*/
using namespace std;
typedef long long LL ;

const LL maxn=1000000;

int b[7];
int c[7];
void getnum(int y){
int i=0;
do{
b[i++]=y%10;
y/=10;
}while(y!=0);
//cout<<b[0]<<b[1]<<b[2]<<b[3]<<b[4]<<b[5]<<endl;
}
bool ccc(int x){
int y=sqrt(x);
if((y*y)==x){
return true;
}
return false;
}

bool check(int n){
int a[9]={0};
int i=0;
do{
a[i++]=n%10;
n/=10;
}while(n);
int s1=0,s2=0,j;
for(i--;i>0;i--){
s1+=a[i];
if(!ccc(s1)){
s1*=10;
continue;
}
for(j=i-1;j>=0;j--){
s2+=a[j];
if(j==0){
continue;
}
s2*=10;
}
if(s2==0)continue;
if(ccc(s2))return true;
s2=0;
s1*=10;
}
return false;
}
int mat[1000]={0};
int book[1000]={0};
int main(){

int n,m;
cin>>n>>m;
int big=0;
for(int i=0;i<n-1;i++){
int a,b;
cin>>a>>b;
mat[b]=a;
big=max(big,a);
big=max(big,b);
}
mat[big]=big+1;
book[big+1]=1;
for(int j=0;j<m;j++){
char x;int y;
cin>>x>>y;
int time=0;
if(x=='Q'){
int x=mat[y];
while(book[x]!=1){
x=mat[x];
time++;
}
cout<<time<<endl;
}else if(x=='P'){
int x=mat[y];
while(book[x]!=1){
book[x]=1;
x=mat[x];
time++;
}
cout<<time<<endl;
}
}
return 0;
}