emoji表情包
⭐️ 本题使用暴力枚举,统计n可以分成几个4和7, 为了防止TLE ,先统计4的个数,然后再算使用否有7,若有7,则统计7的个数。最后为了保证输出的数最小,先输出4,再输出7!
02.03
#include
using namespace std;
int ans1,ans2;
int n,i,j;
int flag;
int main()
{
while (cin>>n)
{
flag=0;//做标记
for (i=0;i<=n;i+=4)
{
if ((n-i)%7==0)
{
flag=1;//存在
ans1=i/4;
ans2=(n-i)/7;//记录4和7的个数
break;//因为要取最小的,所以break
}
}
if (flag==0)
printf("xinganheixiong\n");
else
{
for(i=0;i<ans1;i++)
printf("4");
for(i=0;i<ans2;i++)
printf("7");//先输出4保证数最小
printf("\n");
}
}
return 0;
}
#include
#include
using namespace std;
struct student
{
int num;//学号
int a,b,c;//b最后
int d;//a,c之和
int t;//输入顺序
} a[100005];
int cmp(const struct student &a,const struct student &b)
{
if(a.d!=b.d)
{
return a.d>b.d;
}
else if (a.d==b.d)
{
if (a.b!=b.b)
return a.b>b.b;
else return a.t>b.t;
}
}
int main()
{
int n;//人数
while (cin>>n)
{
for (int i=1; i<=n; i++)
{
cin>>a[i].num>>a[i].a>>a[i].b>>a[i].c;
a[i].d=a[i].a+a[i].c;
a[i].t=i;
}
sort(a+1,a+1+n,cmp);
if (n<=4)
{
for (int i=1; i<=n; i++)
printf("%d %d\n",a[i].num,a[i].d);
}
else if(n>4)
{
for (int i=1; i<=4; i++)
printf("%d %d\n",a[i].num,a[i].d);
}
}
return 0;
}
一直TLE的代码 啊啊啊啊
#include
#include
using namespace std;
int a,b;
int ans;
int l,r,mid,d,w;
int i,j;
int check(int d)
{
int ans=0;
int a1=min(a,b);
int b1=max(a,b);
for (i=0;;i++)
{
if (a1+5<=b1)
a1+=5,ans++;
if (a1+5>b1)
{
if (a1+2<=b1)
a1+=2,ans++;
if (a1+2>b1)
{
if (a1+1<=b1)
a1+=1,ans++;
if (a1+1>b1)
break;
}
}
}
if (ans<=d) return 1;
else return 0;
}
int main()
{
//ios::sync_with_stdio(false);
int t;
scanf("%d",&t);
while (t--)
{
scanf("%d %d",&a,&b);
w=0;
if (a==b)
printf("0\n");
else
{
r=max(a,b)-min(a,b);
l=1;
while (r>=l)
{
mid=(r+l)/2;
if (check(mid)==1)
{
r=mid-1;
w=mid;
}
else l=mid+1;
}
printf("%d\n",w);
}
}
return 0;
}
⭐️ AC代码太不容易了。其实这道题很简单,是我之前想复杂了,增加了时间复杂度,所以才一直TLE
⭐️ 注意fabs是取绝对值的函数
02.03
#include
using namespace std;
int t,a,b;
int x;//两数差的绝对值
int main()
{
int sum;
cin>>t;
while (t--)
{
sum=0;
cin>>a>>b;
x=fabs(a-b);//fabs是取绝对值的函数
while (x>=5)
{
sum+=x/5;
x=x-x/5*5;
}
while (x>=2)
{
sum+=x/2;
x-=x/2*2;
}
while (x>=1)
{
sum+=x;
x-=x;
}
cout<<sum<<endl;
}
return 0;
}
❤️ 今日是二月二号,祝武汉一切安好
⭐️注意本题最后输出时要颠倒顺序
⭐️本题并不难,注意栈的用法即可
#include
using namespace std;
stack <char>lay;
int i,j;
int k[102];
int main()
{
ios::sync_with_stdio(false);
char x[102];
char y1;
int l;//字符串长度
while (cin>>x)
{
l=strlen(x);
for(i=0;i<l;i++)
{
if (lay.empty())
lay.push(x[i]);
else if (lay.top()!=x[i])
lay.push(x[i]);
else
{
y1=lay.top();
if (y1=='o'&&x[i]=='o')
{
lay.pop();
if (!lay.empty()&&lay.top()=='O')//再次分情况讨论!!
lay.pop();
else lay.push('O');
}
if (y1=='O'&&x[i]=='O')
lay.pop();//若同为大写,则直接出栈即可
}
}
j=0;
while (!lay.empty())
{
k[++j]=lay.top();
lay.pop();
}
for (i=j;i>=1;i--)
{
printf("%c",k[i]);
if (i==1)
printf("\n");
}
}
return 0;
}
#include
#include
using namespace std;
int main()
{
int x1,x2,y1,y2;
int r,k;
int minn,maxn;
while (scanf("%d %d",&x1,&y1)!=EOF)
{
scanf("%d %d",&x2,&y2);
r=x2-y2;
minn=min(x1,y1);
maxn=max(x1,y1);
k=0;
for (int i=2;i<=minn;i++)
{
if (minn%i==0&&maxn%i==0)
{
if(r%i==0)
{
k++;
break;
}
}
}
if (k==1&&r>0)
printf("Y\n");
else printf("N\n");
}
return 0;
}
#include
#include
using namespace std;
int n;//人数<100
int a[110];//<1000
int b[110];
int i,j;
int tmp;//自己
int main()
{
int t;
cin>>t;//t组数据
while (t--)
{
cin>>n;
for(i=1; i<=n; i++)
{
cin>>a[i];
//b[i]=a[i];
}
memset(b,0,sizeof(b));
b[1]=0;
for (j=2; j<=n; j++)
{
for (i=1; i<=j; i++)
{
tmp=a[j];
if (tmp>a[i])
{
b[j]++;
}
}
}
for (i=1; i<n; i++)
printf("%d ",b[i]);
printf("%d\n",b[i]);
}
return 0;
}
⭐️本题先用暴力枚举算出m=0,1,2时的个数即可得出规律
⭐️ 使用快速幂取模的模板
模板提供
此博客详细讲了快速幂取模
ll quickmod (ll a,ll b,ll c)
{
int ret=1;
while (b)
{
if (b&1)//奇数最后一位为1,b%2==1也可用,速度差不多
ret=ret*a%c;
a=a*a%c;
b/=2;//向下取整
}
return ret;
}
ac代码
#include
using namespace std;
int m;
long long mod=1e9+7;//注意数据类型!!
long long a,b;//要求的数对,都小于n!
long long quickmod (long long a,long long b)
{
int ans=1;
while (b)
{
if (b&1)//奇数最后一位为1,b%2==1也可用,速度差不多
ans=ans*a%mod;
a=a*a%mod;
b/=2;//向下取整
}
return ans;
}
int main()
{
long long sum;
while (cin>>m)
{
sum=quickmod(3,m);
cout<<sum<<endl;
}
return 0;
}
本次比赛中最简单的一道题
#include
#include
using namespace std;
int main()
{
int a[110];
int n;
while (cin>>n)
{
for (int i=0;i<n;i++)
cin>>a[i];
sort (a,a+n);
printf("%d %d\n",a[n-2],a[1]);
}
return 0;
}
⭐️题目⭐️
吃辣条
Problem:L
Time Limit:1000ms
Memory Limit:65535K
Description
冬天悄无声息的来了。
北方人常常会选择喝酒来御寒;在无辣不欢的南方,有些人会选择吃火锅或是烤肉来取暖,也有些人会选择吃辣条来“升温”。
张家界的天气越来越冷了,贫穷小Z没有羽绒服,只好靠辣条来熬过这个冬天,可超市的辣条种数繁多,一共有n种,每种辣条都有一个价格a[i],小Z又有选择恐惧症,一直在犹豫买哪种辣条。经过一个多小时的抉择,小Z觉得自己很2,就买第二贵和第二便宜的那两种辣条吧。现在憨憨的小Z想知道第二贵和第二便宜的辣条的价格是多少,你可否帮帮憨憨的小Z呢?
Input
多组输入。
第一行输入一个n(4<=n<=100),代表超市里有n种辣条。
第二行输入n个整数ai,分别指每种辣条的价格,且每种辣条的价格都不一样。
Output
输出两个整数,分别指第二贵和第二便宜的辣条的价格。
Sample Input
5
7 6 11 150 23
4
9 8 7 6
Sample Output
23 7
8 7
Hint
多组输入
Source
善良的ljw送你的签到题
#include
using namespace std;
struct que
{
int q1;//原先
int q2;//改后
};
bool operator < (const que &s1,const que &s2)
{
return s1.q2>s2.q2;
}
priority_queue<que,vector<que> >q;
int n,r,s;
long long x,xx;
int a[10];
int ant,tmp;
int main()
{
while(cin>>n)
{
//cin>>n;
for (int i=1; i<=n; i++)
{
ant=0;
s=0;
cin>>x;
xx=x;
while(x)
{
r=x%10;
x=x/10;
a[ant++]=r;
}
for(int j=0; j<ant; j++)
{
s=s*10+a[j];
}
//cout<
q.push({xx,s});
}
while(q.size()>1)
{
que tmp=q.top();
printf("%d ",tmp.q1);
q.pop();
}
que tmp=q.top();
printf("%d\n",tmp.q1);
q.pop();
}
return 0;
}
#include
using namespace std;
int t,n;
queue<int>poker;
int tmp,r;
int main()
{
cin>>t;
for (int i=1;i<=t;i++)
{
cin>>n;
if(n==1)
cout<<'1'<<endl;
else
{
for (int j=1;j<=n;j++)
poker.push(j);
while(poker.size()>1)
{
tmp=poker.front();
cout<<tmp;
if(poker.size()>2)
cout<<',';
poker.pop();
r=poker.front();
poker.pop();
poker.push(r);
//if(poker.size()==1)
//break;
}
cout<<endl<<poker.front()<<endl;
poker.pop();
}
}
return 0;
}
#include
using namespace std;
typedef long long LL;
const int N=1e6+1;
bool b[N];
int prime[N];
int max1,min1;
int t,l,r;
int jud,cnt;
LL ans;
void isprime()
{
memset(b,1,sizeof(b));
b[0]=b[1]=0;
for (int i=2;i<=N;i++)
{
if(b[i])
prime[++cnt]=i;
for (int j=1;j<=cnt&&prime[j]*i<=N;j++)
{
b[prime[j]*i]=0;
if (i%prime[j]==0)
break;
}
}
}
int main()
{
isprime();
cin>>t;
for(int i=1;i<=t;i++)
{
jud=0;
cin>>l>>r;
for(int j=l;j<=r;j++)
{
if(b[j]==1)
{
jud=1;
min1=j;
break;
}
}
for(int j=r;j>=l;j--)
{
if(b[j]==1)
{
jud=1;
max1=j;
break;
}
}
if(jud==1)
ans+=max1+min1;
}
printf("%lld\n",ans);
return 0;
}
#include
using namespace std;
long long n,x;
priority_queue<long long,vector<long long>,greater<long long> >q;
long long y3,y2;
int main()
{
//ios::sync_with_stdio(false);
while(scanf("%lld",&n)!=EOF)
{
for (long long i=1;i<=n;i++)
{
scanf("%lld",&x);
q.push(x);
}
while(q.size()>2)
{
y3=q.top();q.pop();
y2=q.top();q.pop();
q.push(y3+y2);
printf("%lld ",y2+y3);
/*if (q.size()>1)
//cout<
}
y3=q.top();q.pop();
y2=q.top();q.pop();
printf("%lld\n",y2+y3);
}
return 0;
}
⭐️注意map套map的用法,相当于二维数组
⭐️大佬的博客的讲解用于借鉴 点此查看
#include
using namespace std;
map<int,map<int,int> >q;
int n,x,y,num,ans;
int main()
{
ios::sync_with_stdio(false);
cin>>n;
while(n--)
{
cin>>x>>y;
q[x][y]++;//map套map相当于二维数组
}
for(auto i=q.begin();i!=q.end();i++)
for(auto j=i->second.begin();j!=i->second.end();j++)
{
x=i->first;
y=j->first;
if(x==0&&y==0)
num=q[x][y];
else num=q[x][y]+q[-x][-y];
if(!(num&1))
{
ans+=num;
q[x][y]=0;
q[-x][-y]=0;
}
}
cout<<ans<<endl;
return 0;
}
#include
using namespace std;
int a[300010];
int n,k,l,r;
int sum,flag;
int main()
{
ios::sync_with_stdio(false);
cin>>n>>k;
for (int i=1;i<=n;i++)
cin>>a[i];
sum=0;//初始化
l=1;
flag=0;
for (r=1;r<=n;r++)
{
sum+=a[r];
while(sum>k&&l<r)
{
sum=sum-a[l];
l++;
}
if(sum==k)
{
flag=1;
break;
}
}
if(flag==1)
cout<<l<<" "<<r;
else
cout<<"tiangeniupi";
return 0;
}
#include
using namespace std;
int n,m;
int a,b,flag;
set<int>q;
set<int>ss;
set<int>ans;
set<int>::iterator it;
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
while (n--)
{
cin>>a;
q.insert(a);
}
while(m--)
{
cin>>b;
ss.insert(b);
}
//set::iterator it;
flag=0;
for(it=q.begin();it!=q.end();it++)
{
if(!ss.count(*it))
{
ans.insert(*it);
flag=1;//记录存在
}
}
if (flag==1)
for (it=ans.begin();it!=ans.end();it++)
cout<<*it<<endl;
else
cout<<"So crazy!!!"<<endl;
return 0;
}