@Asuna
2016-10-06T14:13:27.000000Z
字数 6590
阅读 889
题意:这是一道难度极大的题。本萌妹苦思冥想许久才明白这道题要我做什么,其实就是定义了一些lucky number,含有4或者7就能叫做lucky number了。而这道题需要我们判断一个数是否是幸运数或是它的整数倍,若是则打“Yes”,否则输出“No”。
分析:这可难倒了本萌妹了。但就在本萌妹晚上敷面膜的时候突然灵光一现!原来n才1000也!于是本萌妹无耻地打了表之后把读入的n拉进去mod下每个表里的数,有等于0的就说明是,一直到结束都没有就是“No”咯。本萌妹聪明吧。
参考代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
int n,k=0;
int a[13]={4,7,44,47,74,77,444,447,474,477,744,747,777};
cin>>n;
for (int i=0; i<13; i++)
{
k++;
if (n%a[i]==0)
{
cout<<"YES"<<endl;
break;
}
}
if (k==13)
{
cout<<"NO"<<endl;
}
return 0;
}
题意:这是一道难度极大的题。本萌妹苦思冥想许久才明白这题我要做什么,其实就是给我们一个字符串,要我们求出到底是4出现的多还是7出现的多,如果都没出现过那就输出“-1”。
分析:这可难倒了本萌妹了。但就在本萌妹晚上泡牛奶浴的时候突然灵光一现!这题就是把字符串扫一遍过去看看4多还是7多嘛。需要注意的就是一样多的时候输出字典序小的那个就是4咯。
参考代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
int main()
{
char a[51];
int i,sum1,sum2;
cin>>a;
sum1=sum2=0;
for(i=0; a[i]!='\0'; i++)
{
if (a[i]=='4') sum1++;
if (a[i]=='7') sum2++;
}
if((sum1==0) && (sum2==0)) cout<<"-1"<<endl;
else if (sum1>=sum2) cout<<4<<endl;
else if (sum1<sum2) cout<<7<<endl;
return 0;
}
题意:这是一道难度极大的题。本萌妹苦思冥想许久才明白这道题要我做什么,就是本萌妹站在一个n人的队列里,我前面的人不少于a,我的人不多于b,求本萌妹站位的所有可能数目。
分析:这可难倒了本萌妹了。但就在本萌妹晚上和姐妹夜谈的时候突然灵光一现!其实我们只要判断n-a和b的大小关系,考虑小的那个就行啦啦啦啦啦。
参考代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n,a,b,c,r;
while (cin>>n>>a>>b)
{
c=n-a-1;
if (c>b)
{
r=b+1;
}
else
{
r=c+1;
}
cout<<r<<endl;
}
return 0;
}
题意:这是一道难度极大的题。本萌妹苦思冥想许久才明白这题我要做什么,就是给我们n个k位的数字的序列,现在可以对每一个数字进行相同的操作,比如,你可以n个数字数字的第1,2位都互换掉。现在对这n个数字一系列操作后,会产生许多不同的序列,求序列的max-序列的min。
分析:这可难倒了本萌妹了。但就在本萌妹晚上刷韩剧的时候突然灵光一现!其实就是用dfs求出有k!种排列。对每一种排列,把n个数字的每一个数字按照排列的顺序重新排,得到一个新的序列,然后求出其max-min。把所有排列都求一遍得到答案。
参考代码:(冗长勿喷)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
char c[101][101],s[101][101];
int num[101],a[101],ans,n,k;
void solve()
{
for (int i=0; i<n; i++)
for (int j=0; j<k; j++)
{
s[i][j]=c[i][a[j]];
// cout<<s[i]<<endl;
}
for (int i=0; i<n; i++)
{
int sum=0;
for (int j=0; j<k; j++)
{
int cc=s[i][j]-'0';
sum=sum*10+cc;
}
// cout<<sum<<endl;
num[i]=sum;
}
sort(num,num+n);
ans=min(ans,num[n-1]-num[0]);
//cout<<ans<<endl;
}
void dfs(int x)
{
if (x==k)
{
solve(); return;
}
for (int i=0; i<k; i++)
{
bool b=true;
for (int j=0; j<x; j++)
{
if (a[j]==i) b=false;
}
if (b==true)
{
a[x]=i;
dfs(x+1);
}
}
return ;
}
int main()
{
memset(a,0,sizeof(a));
memset(num,0,sizeof(num));
cin>>n>>k;
for (int i=0; i<n; i++)
cin>>c[i];
ans=1000000000;
dfs(0);
cout<<ans<<endl;
return 0;
}
题意:这是一道难度极大的题。本萌妹苦思冥想许久才明白这题我要做什么,就是给我们n个点的坐标,然后要我们在纸上用折线将这n个点连起来,一共有k张纸,连线速度为50/s,求所用总的时间。
分析:这可难倒了本萌妹了。但就在本萌妹晚上啃薯片的时候突然灵光一现!其实我们求出一张纸上的用时然后*k/50就ok啦。。。。
参考代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
double x[1001],y[1001];
int main()
{
int n,k;
double sum=0,ans,xx,yy;
cin>>n>>k;
for (int i=1; i<=n; i++)
{
cin>>x[i]>>y[i];
if (i>1)
{
xx=(x[i]-x[i-1])*(x[i]-x[i-1]);
yy=(y[i]-y[i-1])*(y[i]-y[i-1]);
sum+=(sqrt(xx+yy));
//cout<<i<<"shabi"<<" "<<sum<<endl;
}
}
ans=sum*k/50.0;
printf("%.9lf\n",ans);
return 0;
}
题意:这是一道难度极大的题。本萌妹苦思冥想许久才明白这题我要做什么,就是给我们n根木棒,问我们最多能组成多少个矩形,注意不能把棒棒掰断也不能组合它们哟。
分析:这可难倒了本萌妹了。但就在本萌妹晚上背英语单词的时候突然灵光一现!其实我们只要把相同长的棒棒两两配对,把对数/2就可以得出有多少个矩形啦啦啦啦啦啦啦啦。
参考代码:
#include<iostream>
using namespace std;
int main()
{
int n,k,a[1000],ans=0;
cin>>n;
for (int i=1; i<=n; i++)
{
cin>>k;
a[k]++;
//cout<<a[k]<<endl;
}
//for (int i=1; i<=10; i++)
// cout<<a[i]<<" ";
for (int i=1; i<=110; i++)
{
while ((a[i]>=2) && (a[i]!=0))
{
a[i]-=2;
ans++;
}
//for (int i=1; i<=10; i++)
// cout<<a[i]<<" ";
//cout<<endl;
}
cout<<ans/2<<endl;
return 0;
}
题意:这是一道难度极大的题。本萌妹苦思冥想许久才明白这题我要做什么,就是有姐妹两个为了分物品的时候不产生矛盾,妹妹决定根据总饼干的奇偶,来偷走相应的堆数解决这个矛盾(心机婊,要是善良的我就把所有饼干都拿走这样姐姐都不知道有饼干)。
分析:这可难倒了本萌妹了。但就在本萌妹晚上yy男神的时候突然灵光一现!其实我们只需要判断最后总数量的奇偶性来决定偷走奇数堆还是偶数堆就行了呀呀呀呀呀呀。(男神果然助我一臂之力)
参考代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,sum=0,a,ji=0,ou=0;
cin>>n;
for (int i=1; i<=n; i++)
{
cin>>a;
sum+=a;
if ((a%2)==1) ji++;
else ou++;
}
if ((sum%2)==1) cout<<ji<<endl;
else cout<<ou<<endl;
return 0;
}
我没做你打我呀2333333333333333
题意:这是一道难度极大的题。本萌妹苦思冥想许久才明白这题我要做什么,如果全是大写或者除了首字母是小写其他为大写,则转换为第一个字母大写,其他的小写,如果不是以上两种情况则不作处理。
分析:这可难倒了本萌妹了。但就在本萌妹晚上玩暖暖环游世界(别问我为什么知道这个游戏)的时候突然灵光一现!本萌妹不是在题意就写出解法了吗!我的天哪噜!其实需要注意的是单个字母也算!
参考代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main()
{
char c[101];
int l,s1=0,s=0;
cin>>c;
l=strlen(c);
for (int i=1; i<l; i++)
{
if (c[i]>='A'&& c[i]<='Z') s++;
else if (c[i]>='a'&& c[i]<='z') s1++;
}
if ((s1==0 && s!=0) || l==1)
{
if (c[0]>='a'&&c[0]<='z') c[0]-=32;
else if (c[0]>='A'&&c[0]<='Z') c[0]+=32;
for (int i=1; i<l; i++) c[i]+=32;
cout<<c<<endl;
}
else cout<<c<<endl;
return 0;
}
我不会你来打我啊233333333333333333
题意:这是一道难度极大的题。本萌妹苦思冥想许久才明白这题我要做什么,就是n男m女配对活动,至少4男1女在一个组里,一组有t个人。问有多少种不同的分组方法。
分析:这可难倒了本萌妹了。但就在本萌妹晚上刷牙的时候突然灵光一现!这不就是个组合问题么,我们只需要把女生初始的时候设为最少(男生就是n个,女生就是t-n个),然后进行组合,再用一个女生替换一个男生,再组合……以此类推直到把女生都用上或者男生到了4个。需要注意的是可能t< n这个需要单独考虑。
参考代码:(冗长勿喷)
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
long long n,m,t,s1,s2,ans1,ans=0;
long double sum1,sum2;
long long t1,t2;
void zuhe()
{
for (int i=1; i<=s1; i++)
{
sum1=sum1*t1/i;
t1--;
// cout<<t1<<endl;
}
//cout<<sum1<<endl;
/*for (int i=1; i<=s1; i++)
sum1/=i;
*/
for (int i=1; i<=s2; i++)
{
sum2=sum2*t2/i;
t2--;
}
//cout<<sum2<<endl;
/*for (int i=1; i<=s2; i++)
sum2/=i;*/
ans1=sum1*sum2;
}
int main()
{
cin>>n>>m>>t;
if (t>=n)
{
s1=n;
s2=(t-s1);
if (s2==0)
{
s2++;
s1--;
}
while ((s1>=4) && (s2<=m))
{
t1=n;
t2=m;
sum1=1;
sum2=1;
zuhe();
ans+=ans1;
s1--;
s2++;
//cout<<s1<<" "<<s2<<endl;
}
cout<<ans<<endl;
return 0;
}
s1=4;
s2=t-s1;
while ((s1<=t) && (s2>=1))
{
t1=n;
t2=m;
sum1=1;
sum2=1;
zuhe();
ans+=ans1;
s1++;
s2--;
}
cout<<ans<<endl;
return 0;
}
DFS?不会做你打死我好了23333333333333333
题意+分析:这是一道难度极大的题。本萌妹苦思冥想许久才明白这题我要做什么,就是判断"H","Q","9"有没有,有任何一个都输出“Yes”。就这么做吧(别问我灵光一现的时候在做什么)。
参考代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
char s[1000];
int main()
{
int l,bo;
cin>>s;
l=strlen(s);
bo=0;
for (int i=0; i<l; i++)
if ((s[i]=='Q') || (s[i]=='H') || (s[i]=='9'))
{
bo=1;
break;
}
if (bo) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}
题意:这是一道难度极大的题。本萌妹苦思冥想许久才明白这题我要做什么,就是几个符号分别代表了2进制的几个数,然后输入几个符号连在一起我们就要把对应的2进制串在一起之后再转换成10进制,mod 10^6+3。
分析:这可难倒了本萌妹了。但就在本萌妹晚上数绵羊的时候突然灵光一现!其实我们可以把每个符号都单独先转换成10进制呀,而对于连续的符号我们只要从最后一个符号开始每向前一个都乘16再相加呀。这样就直接转换成10进制了而不需要串起来再做也不需要打表啦。
参考代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
using namespace std;
char s[1000],c[8];
int main()
{
c[0]='>';
c[1]='<';
c[2]='+';
c[3]='-';
c[4]='.';
c[5]=',';
c[6]='[';
c[7]=']';
//cout<<c<<endl;
int l,j=0,ans=0;
cin>>s;
l=strlen(s);
//cout<<l<<endl;
for (int i=0; i<l; i++)
{
while ((c[j]!=s[i]))
{
//cout<<c[j]<<endl;
j++;
}
ans=(ans*16+8+j)%1000003;
j=0;
}
cout<<ans<<endl;
return 0;
}
本萌妹睡了抱歉。