A:给出一组点的坐标,判断是否能去掉一个点使剩下的点的坐标都在y轴一侧,记下y轴左右侧的点的数量即可
#include<bits/stdc++.h>
using namespace std;
using namespace std;
int main()
{
int n;
int x,y;
int a,b;
a = 0;
b = 0;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&x,&y);
if(x > 0)
a++;
else
b++;
}
if(a <= 1 || b <= 1)
printf("Yes");
else
printf("No");
return 0;
}
{
int n;
int x,y;
int a,b;
a = 0;
b = 0;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&x,&y);
if(x > 0)
a++;
else
b++;
}
if(a <= 1 || b <= 1)
printf("Yes");
else
printf("No");
return 0;
}
B:给出一个分数的分子分母,再给出另外一个数,求这个数在分数的小数表示中第一次出现的位置,即分数求循环节。
#include<bits/stdc++.h>
using namespace std;
int d[1000],rem[1000];
bool check(int r,int c,int n)
{
for(int i = 0; i < n; i++)
if(rem[i] == r && d[i] == c)//余数和除数都相等时表示找到了循环节
return 1;
return 0;
}
int main()
{
int flag = 0;
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
memset(d,0,sizeof(d));
memset(rem,0,sizeof(rem));
if(a >= b)
a %= b;
int co = a*10/b;
int r = (a*10)%b;
int n = 0;
while(check(r,co,n) != 1)
{
d[n] = co;
rem[n] = r;
n++;
if(co == c)
{
printf("%d",n);
flag = 1;
break;
}
r *= 10;
co = r / b;
r %= b;
}
if(!flag)
printf("-1");
return 0;
}
using namespace std;
int d[1000],rem[1000];
bool check(int r,int c,int n)
{
for(int i = 0; i < n; i++)
if(rem[i] == r && d[i] == c)//余数和除数都相等时表示找到了循环节
return 1;
return 0;
}
int main()
{
int flag = 0;
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
memset(d,0,sizeof(d));
memset(rem,0,sizeof(rem));
if(a >= b)
a %= b;
int co = a*10/b;
int r = (a*10)%b;
int n = 0;
while(check(r,co,n) != 1)
{
d[n] = co;
rem[n] = r;
n++;
if(co == c)
{
printf("%d",n);
flag = 1;
break;
}
r *= 10;
co = r / b;
r %= b;
}
if(!flag)
printf("-1");
return 0;
}
C:若数组中一个数前的所有数都比这个数小,那么定义它为一个record。若去掉某一个元素使剩下的数组中record最多,求这个元素。
对每个元素,考虑去掉它的情况。
若第i个元素前有i-1个小于它的元素,则去掉该元素后这个数组前i个元素的record总数-1。
若第i个元素前有i-2个小于它的元素,那么去掉前i个元素中大于第i个元素的那个元素后,前i个元素的record总数+1。(如果最大数在第一个位置去掉它会使第二位,第i位的数成为record;如果在其它位置,则会使第一位,第i位的数成为record,所以record总数加1)
若第i个元素前有两个及以上的元素大于它,那么无论去掉它还是大于它的元素,前i个元素record总数不变。
循环完毕后找到去掉它后record总数增加最多的元素即可。
#include<bits/stdc++.h>
#define inf 1e9
using namespace std;
int a[100005];
int main()
{
int n;
scanf("%d",&n);
int mx,mx1,mx2;
mx = mx1 = mx2 = -inf;
int m = n;
while(n--)
{
int x;
scanf("%d",&x);
if(x > mx1)
{
mx2 = mx1;
mx1 = x;
a[x]--;
//printf("1 %d %d\n",x,a[x]);
}
else if(x > mx2)
{
a[mx1]++;
mx2 = x;
//printf("2 %d %d\n",x,a[x]);
}
}
int pos ;
for(int i = 1; i <= m; i++)
{
//printf("i:%d %d \n",i,a[i]);
if(a[i] > mx)
{
mx = a[i];
pos = i;
}
}
printf("%d",pos);
return 0;
}