畫正方形
題目很簡單,兩個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;
}