画正方形
题目很简单,两个for循环嵌套一下,控制下每行左后一位的换行直接输出就好了。
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b,i,j;
scanf("%d%d",&a,&b);
for(i=0;i<a;i++)
{
for(j=0;j<a;j++)
printf("%d",b);
printf("\n");
}
if(t>0) printf("\n");
}
return 0;
}
勇者斗恶龙
简单的思路,排序后,直接遍历对比就好了
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
int a[20005],b[20005];
int main(void)
{
int n,m;
while(~scanf("%d%d",&n,&m)&&n&&m)
{
int sum=0,count=0,t=0;
for(int i=0; i<n; i++) scanf("%d",&a[i]);
for(int j=0; j<m; j++) scanf("%d",&b[j]);
sort(a,a+n); sort(b,b+m);
for(int j=0; j<m; j++)
{
if(b[j]>=a[t])
{
sum+=b[j];
t++;
}
if(t==n) break;
}
if(t==n) printf("%d\n",sum);
else printf("Loowater is doomed!\n");
}
return 0;
}
求余
就是用字符串模拟下求余的过程就好了 只要注意到n的范围有10^2000就知道明显无法直接存,那么就是模拟一下过程喽
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
int main()
{
int k,i,j;
char n[2000];
while(~scanf("%s %d",n,&k))
{
j=0;
for(i=0;i<strlen(n);i++)
{
j=j*10+n[i]-'0';
j=j%k;
}
printf("%d\n",j);
}
return 0;
}
小学问题(听说100人99个第一次答错)
emmm如题,就是小学问题。。。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
int main()
{
int a,b,c,d;
while(~scanf("%d%d%d%d",&a,&b,&c,&d))
printf("%d\n",a+d);
return 0;
}
互质
就是求两个数的最大公约数==1的数字有几个,直接暴力跑一边就好了。数据水。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
int main()
{
int n;
while(~scanf("%d",&n))
{
int a,b,c=0,d,t;
for(t=1;t<=n;t++)
{
a=n;
b=t;
d=a%b;
while(d!=0)
{
a=b;
b=d;
d=a%b;
}
if(b==1)
c++;
}
printf("%d\n",c);
}
return 0;
}
求 1 + 1/2! +...+ 1/n!
这题就是一个一个for循环跑一边的事,注意别失精度就好了
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
int main()
{
int repeat;
scanf("%d",&repeat);
while(repeat--)
{
int n;
double s=0;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
double a=1;
for(int j=1; j<=i; j++)
a=a*j;
s+=1/a;
}
printf("%.4f\n",s);
}
return 0;
}
判断素数
数据水,直接暴力就好了,从2枚举就ok。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
int main()
{
int repeat;
scanf("%d",&repeat);
while(repeat--)
{
int m,n;
scanf("%d",&m);
if(m!=1)
{
int i;
for(i=2;i<m;i++)
if(m%i==0)
break;
if(i==m) puts("YES");
else puts("NO");
}
if(m==1) puts("NO");
}
return 0;
}
龟兔赛跑预测
在一个以秒为单位的无限循环中,每一层循环让兔子和乌龟往前跑相应距离,结束时检测兔子是否超过乌龟t米,如果超过则开始休息s秒,则直接快进s秒,s秒内乌龟移动,并且秒数增加,但注意,在每一秒结束时都应该检测是否到达终点。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
int main()
{
int v1,v2,t,s,l;
while(~scanf("%d%d%d%d%d",&v1,&v2,&t,&s,&l))
{
int x1=v1,x2=v2,f=0,a=1;
while(x1<l&&x2<l)
{
if(x1-x2>=t&&!f) f=s;
if(f) f--;
else x1+=v1;
x2+=v2;
a++;
}
if(x1==l&&x2<l) printf("R\n");
else if(x1<l&&x2==l) printf("T\n");
else printf("D\n");
printf("%d\n",a);
}
return 0;
}
凶手
emmmm自己手写一下输出就好了啦
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
int main()
{
cout<<'B'<<endl<<'C'<<endl<<'D'<<endl<<'E'<<endl;
return 0;
}
zbj的长跑
画图分析下,分析当n和m都是偶数的时候,打卡完每个点需要的距离为n*m , 当n或m为奇数或者n和m都是奇数时,打卡完每个点需要的距离为n*m-1+sqrt(2)。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
int main()
{
int a,b;
double c;
while(~scanf("%d%d",&a,&b))
{
if(a%2==0||b%2==0)
{
c=a*b;
printf("%.2f\n",c);
}
else
{
c=(a*b)-1+sqrt(2);
printf("%.2f\n",c);
}
}
return 0;
}
Parity check
找规律,会发现结果为0,1,1循环,然后及时取模防止数据过大溢出
低位取余
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const int maxn=1005;
int main()
{
char s[maxn];
while(~scanf("%s",s))
{
int k=0;
for(int i=0;i<=strlen(s)-1;i++)
k+=s[i]-'0';
if(k%3==0) puts("0");
else puts("1");
}
return 0;
}
一生之敌
去年校赛题
b^2=2*a*(a+1)^2<=1e19可以得到a<=3e6,枚举i=sqrt(2*a),则a=i*i/2,b=(a+1)*i
打表,输出防止tle就二分输出下就好了,由于数据贼大用ull。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
const int MAXN = 1400000 + 100;
const ull INF = 1000000000000000000;
ull ans[MAXN];
int main()
{
int t;
scanf("%d",&t);
ull n,i;
for(i=1;i<MAXN;i++)
ans[i]=2*i*(2*i*i+1);
while(t--)
{
scanf("%llu",&n);
int kk=lower_bound(ans,ans+MAXN,n)-ans;
printf("%llu\n",ans[kk]);
}
return 0;
}