A - Dasha and Stairs CodeForces - 761A
第一题:看了老半天还不知道奇数和偶数的英文原来是 the number of steps with even and odd numbers.
看了之后就恍然大悟,醍醐灌顶了,你想想只有偶数和奇数
@1、 相隔 1
@2、 相隔为 0
注意注意: a和b 的可以为0.
看我三行代码
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
if((a==b||a==b-1||a-1==b)&&(a||b))
printf("YES\n");
else
printf("NO\n");
}
B - Dasha and friends
这个题目呢,我一开始用了笨方法。就是找间隔距离
然后挨个比较,至于怎么挨个,就是把最前的放到最后,其余往前挪移一个。
其实有更多好方法:
我先贴上我的方法吧。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,L;
scanf("%d%d",&n,&L);
int a[55],b[55];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
{
scanf("%d",&b[i]);
}
int *vis1,*vis2,*c;
vis1=(int *)malloc(sizeof(int)*n);
vis2=(int *)malloc(sizeof(int)*n);
c=(int *)malloc(sizeof(int)*n);
vis1[0]=a[0]+(L-a[n-1]);
vis2[0]=b[0]+(L-b[n-1]);
c[0]=vis2[0];
for(int i=1;i<n;i++)
{
vis1[i]=a[i]-a[i-1];
}
for(int i=1;i<n;i++)
{
c[i]=vis2[i]=b[i]-b[i-1];
}
int flag=1;
for(int i=0;i<n;i++)
{
if(vis1[i]==vis2[i])
{
flag=1;
}
else
{
flag=0;i=-1;
int temp=vis2[0];
for(int j=0;j<n-1;j++)
{
vis2[j]=vis2[j+1];
}
vis2[n-1]=temp;
int cnt=0;
for(int k=0;k<n;k++)
{
if(vis2[k]==c[k])
cnt++;
}
if(cnt==n)
break;
}
}
if(flag==1)
printf("YES\n");
else
{
printf("NO\n");
}
return 0;
}
C - Holiday Of Equality
这题目比水更水。只要把maxz找出来,然后把各个ans+=maxz - a[ i ];
#include<stdio.h>
typedef long long ll;
int main()
{
int n,a[105],maxz=-1;
ll ans=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]>maxz)
{
maxz=a[i];
}
}
for(int i=0;i<n;i++)
{
ans+=(maxz-a[i]);
}
printf("%lld\n",ans);
}
D. Blown GarlandCodeForces - 758B
这题真的有意思,我想了很久很久,首先我以为,我很天真地以为其实加4就可以把
!间是R++,B++,G++,Y++;
毕竟还是天真,没想到它可以连续空几个4k ( k属于z+), 然后我发现用二维数组处理意外地有效。
#include<stdio.h>
#include<string.h>
int main()
{
char str[200][4];
scanf("%s",*str);
getchar();
char v[5];
int c[5]={0};
for(int j=0;j<4;j++)
{
int flag=1,flag2=1;
for(int i=0;flag;i++)
{
if(str[i][j]=='\0')
{
flag=0;
continue;
}
if(flag)
{
if(str[i][j]!='!'&&flag2)
{
flag2=0;
switch(str[i][j])
{
case 'R':v[j]='R';break;
case 'G':v[j]='G';break;
case 'B':v[j]='B';break;
case 'Y':v[j]='Y';break;
}
}
if(str[i][j]=='!')
{
c[j]++;
}
}
}
}
int r,b,y,g;
for(int i=0;i<4;i++)
{
switch(v[i])
{
case 'R':r=c[i];break;
case 'B':b=c[i];break;
case 'G':g=c[i];break;
case 'Y':y=c[i];break;
}
}
printf("%d %d %d %d\n",r,b,y,g);
return 0;
}
E-Unfair Poll. CodeForces - 758C
这题我真想出来了,但是没实现,我看别人代码没有一个和我像的。只好贴上别人的代码。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main(void) {
int n, m, x, y;
long long k;
scanf("%d%d%I64d%d%d", &n, &m, &k, &x, &y);
int once = n == 1 ? m : (n + n - 2) * m;
long long cnt_full = k / once;
k -= cnt_full * once;
long long ans[100][100];
for(int i = 0; i < n; ++i) {
for(int j = 0; j < m; ++j) {
ans[i][j] = cnt_full * 2;
}
}
for(int j = 0; j < m; ++j) {
ans[0][j] = cnt_full;
ans[n-1][j] = cnt_full;
}
for(int i = 0; i < n; ++i) {
for(int j = 0; j < m; ++j) {
if(--k >= 0) ++ans[i][j]; else break;
}
}
for(int i = n-2; i > 0; --i) {
for(int j = 0; j < m; ++j) {
if(--k >= 0) ++ans[i][j]; else break;
}
}
long long mn = ans[0][0], mx = ans[0][0];
for(int i = 0; i < n; ++i) {
for(int j = 0; j < m; ++j) {
mn = min(mn, ans[i][j]);
mx = max(mx, ans[i][j]);
}
}
printf("%I64d %I64d %I64d\n", mx, mn, ans[x-1][y-1]);
}
F. Chess Tourney-CodeForces - 845A
我一开始以为是田忌赛马问题,把a[ i ] 和a [ i+n]比较而且保证胜利。
但是我没想到居然是决定 regardlessof the results of the drawing 无论它怎么分。都要赢就是说,强队的最差比弱队的最强还要强。
比水更水。自己还做不出来。
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int n;
int a[1005],flag=1;
scanf("%d",&n);
for(int i=0;i<2*n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+2*n);
if(a[n-1]<a[n])
printf("YES\n");
else
printf("NO\n");
return 0;
}
|