第一題:
坑爹的題目,讀了好長時間的題意,幸好最後懂了,我好多同學最後都錯了
在與判斷只有一個數的情況下到底輸不輸出的問題。
[cpp]
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <map>
using namespace std;
const int N=105;
typedef long long LL;
int xh[N],cnt[N];
int k=0;
int main()
{
int i,n;
int c2=0;
cin>>n;
for(i=0;i<n;i++)
{
scanf("%d",&xh[i]);
if(xh[i]>=10&&xh[i]<=99&&xh[i]%10==0)
{
c2=xh[i];
}
}
sort(xh,xh+n);
int vis=0,vis2=0,vis22=0;
for(i=0;i<n;i++)
{
if(xh[i]==0||xh[i]==100)
cnt[++k]=xh[i];
if(xh[i]>=1&&xh[i]<=9&&vis==0)
{
cnt[++k]=xh[i];
vis=1;
}
if(xh[i]>=10&&xh[i]<=99)
{
if(c2!=0&&vis2==0)
{
cnt[++k]=c2;
vis2=1;
}
if(c2==0)
{
if(vis==0&&vis2==0)
{
cnt[++k]=xh[i];
vis2=1;
}
}
}
}
printf("%d\n",k);
for(i=1;i<k;i++)
printf("%d ",cnt[i]);
printf("%d\n",cnt[k]);
return 0;
}
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <map>
using namespace std;
const int N=105;
typedef long long LL;
int xh[N],cnt[N];
int k=0;
int main()
{
int i,n;
int c2=0;
cin>>n;
for(i=0;i<n;i++)
{
scanf("%d",&xh[i]);
if(xh[i]>=10&&xh[i]<=99&&xh[i]%10==0)
{
c2=xh[i];
}
}
sort(xh,xh+n);
int vis=0,vis2=0,vis22=0;
for(i=0;i<n;i++)
{
if(xh[i]==0||xh[i]==100)
cnt[++k]=xh[i];
if(xh[i]>=1&&xh[i]<=9&&vis==0)
{
cnt[++k]=xh[i];
vis=1;
}
if(xh[i]>=10&&xh[i]<=99)
{
if(c2!=0&&vis2==0)
{
cnt[++k]=c2;
vis2=1;
}
if(c2==0)
{
if(vis==0&&vis2==0)
{
cnt[++k]=xh[i];
vis2=1;
}
}
}
}
printf("%d\n",k);
for(i=1;i<k;i++)
printf("%d ",cnt[i]);
printf("%d\n",cnt[k]);
return 0;
}
第二題:
一看 水題,直接模擬,當時過了,最後果斷wa了
因為可能在乘的情況下不能約分 會越界
經別人提醒,順著做,看每個的除數是不是等於ai。
[cpp]
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <map>
using namespace std;
const int N=105;
typedef __int64 LL;
LL xh[N],p,q;
int n,i;
bool test()
{
LL t;
for(i=1;i<=n;i++)
{
if(q==0||(p/q)<xh[i])
return false;
t=p-xh[i]*q;
p=q;
q=t;
}
if(q!=0)
return false;
return true;
}
int main()
{
scanf("%I64d%I64d",&p,&q);
cin>>n;
for(i=1;i<=n;i++)
scanf("%I64d",&xh[i]);
if(test())
printf("YES\n");
else
printf("NO\n");
return 0;
}
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <map>
using namespace std;
const int N=105;
typedef __int64 LL;
LL xh[N],p,q;
int n,i;
bool test()
{
LL t;
for(i=1;i<=n;i++)
{
if(q==0||(p/q)<xh[i])
return false;
t=p-xh[i]*q;
p=q;
q=t;
}
if(q!=0)
return false;
return true;
}
int main()
{
scanf("%I64d%I64d",&p,&q);
cin>>n;
for(i=1;i<=n;i++)
scanf("%I64d",&xh[i]);
if(test())
printf("YES\n");
else
printf("NO\n");
return 0;
}
第三題:
題目思路想出來了,但是就是實現不了。
經高人指點,用二進制位來表示,最後有多少個0就輸出多少
[cpp]
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <map>
using namespace std;
const int N=100005;
typedef __int64 LL;
int save[110000];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
map<int,int>mymap;
map<int,int>::iterator it;
for(int i=1;i<=n;i++)
{
scanf("%d",&save[i]);
it=mymap.find(save[i]);
if(it==mymap.end())
{
mymap[save[i]]=1;
}
else
{
mymap.erase(it);
int temp=save[i]+1;
while(mymap.find(temp)!=mymap.end())
{
mymap.erase(temp);
temp++;
}
mymap[temp]=1;
}
}
it=mymap.begin();
int Max=-1,cnt=0;
for(;it!=mymap.end();it++)
{
cnt++;
Max=max(Max,it->first);
}
printf("%d\n",Max+1-cnt);
}
return 0;
}
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <map>
using namespace std;
const int N=100005;
typedef __int64 LL;
int save[110000];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
map<int,int>mymap;
map<int,int>::iterator it;
for(int i=1;i<=n;i++)
{
scanf("%d",&save[i]);
it=mymap.find(save[i]);
if(it==mymap.end())
{
mymap[save[i]]=1;
}
else
{
mymap.erase(it);
int temp=save[i]+1;
while(mymap.find(temp)!=mymap.end())
{
mymap.erase(temp);
temp++;
}
mymap[temp]=1;
}
}
it=mymap.begin();
int Max=-1,cnt=0;
for(;it!=mymap.end();it++)
{
cnt++;
Max=max(Max,it->first);
}
printf("%d\n",Max+1-cnt);
}
return 0;
}