(感覺這場有點毒呀,是我太菜了)
A. Red-Blue Shuffle
題目傳送門:
A. Red-Blue Shuffle
題意:
給你n張牌,每張牌上有一個紅色的數字和一個藍色的數字,你可以將牌隨便排序,問你是紅色組成的數字大于藍色的概率大,還是藍色組成的數字大于紅色的概率大,還是兩者相等,
思路:
題目也沒要求具體的概率,那么顯然牌上紅色數字大于藍色的數字的牌的數量比較多的話,那么就是紅色贏,同理也可判斷出藍色贏或者兩者平局,
AC Code
#include<bits/stdc++.h>
using namespace std;
int a[1005],b[1005];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
int num1=0,num2=0;
for(int i=1;i<=n;i++)
scanf("%1d",&a[i]);
for(int i=1;i<=n;i++)
scanf("%1d",&b[i]);
for(int i=1;i<=n;i++)
{
if(a[i]>b[i]) num1++;
else if(b[i]>a[i]) num2++;
}
if(num1>num2) printf("RED\n");
else if(num1==num2) printf("EQUAL\n");
else printf("BLUE\n");
}
//system("pause");
return 0;
}
B. Move and Turn
題目傳送門:
B. Move and Turn
題目大意:
有一個無限展的二維平面,一個機器人每秒可以前進一個單位,但是每一秒之后,機器人必須向左轉或者向右轉,問你n秒之后機器人可能出現的坐標的數量,
思路:
一看感覺應該是有規律,于是先敲了一個dfs的代碼,暴力跑了前面10幾個資料,
n=1 —— res=4
n=2 —— res=4
n=3 —— res=12
n=4 —— res=9
n=5 —— res=24
n=6 —— res=16
n=7 —— res=40
n=8 —— res=25
n=9 —— res=60
那么到這里規律應該就很明顯了,把奇數和偶數分開來看,第k個偶數的答案就是(k+1)^2,第k個奇數的答案就是( 1 + k ) * k / 2 * 4
C. Row GCD
題目傳送門:
C. Row GCD
題目大意:

思路:
(不要問我以下是怎么證出來的,因為我也不會,如果有看到的小伙伴知道的話請教教我)
1、gcd(a1,a2,a3,a4……)=gcd(a1,gcd(a2,a3,a4……))
2、gcd(a1,a2) = gcd(a1 , a2-a1)
然后就可以推導題目所求
gcd(a1+d , a2+d , a3+d , a4+d)=gcd(a1+d , a2 - a1 , a3 - a2 , a4 - a3 ) = gcd(a1+d , gcd ( a2 - a1 , a3 - a2 , a4 - a3 ) )
AC Code
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2e5+10;
LL a[N],b[N];
LL gcd(LL a,LL b)
{
if(b==0) return a;
else return gcd(b,a%b);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=m;i++)
scanf("%lld",&b[i]);
if(n==1)
{
for(int i=1;i<=m;i++)
printf("%lld ",a[1]+b[i]);
return 0;
}
sort(a+1,a+1+n);
LL ans=a[2]-a[1];
for(int i=2;i<=n;i++)
ans=gcd(ans,a[i]-a[i-1]);
for(int i=1;i<=m;i++)
printf("%lld ",gcd(ans,a[1]+b[i]));
printf("\n");
//system("pause");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/237543.html
標籤:其他
上一篇:【DFS深度優先搜索】— 全排列
下一篇:C語言實作桌面貪吃蛇
