记录遇见的解除或未解出的、现阶段能看懂理解的,有价值的题目。
比赛网址:
https://vjudge.net/contest/358184#overview
https://vjudge.net/contest/358926#overview
1A.Petya and Java
按数字串长度和大小输出名称
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include <string>
using namespace std;
int main() {
string a;
cin>>a;
int n=a.size();//嗯。
if(n<3||n==3&&a<="127") cout<<"byte"<<endl;
else if(n<5||n==5&&a<="32767") cout<<"short"<<endl;
else if(n<10||n==10&&a<="2147483647") cout<<"int"<<endl;
else if(n<19||n==19&&a<="9223372036854775807") cout<<"long"<<endl;
else cout<<"BigInteger"<<endl;
return 0;
}
1B.Petya and Countryside
针对一个数列,题目的意思其实就是求出以某个数为中心,向左右逐渐下降的最长距离。做法是穷举,以每个数作为中心点,然后求出其最长距离,再比较找出一个最大值即可。
挺有代表性的一道题,对菜b的我启发蛮大的
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include <string>
using namespace std;
int a[10001];
int main() {
int i,n,j,maxm=-1;
cin>>n;
for(i=0;i<n;i++) cin>>a[i];
for(i=0;i<n;i++){
int m=i;int l=1;
for(j=m-1;j>=0;j--){
if(a[j]>a[m]) break;
l++;
m--;//对比数和下一位必须紧紧跟随。
}
m=i;//别忘了回来
for(j=m+1;j<n;j++){
if(a[j]>a[m]) break;
l++;
m++;
}
maxm=max(maxm,l);
}
cout<<maxm<<endl;
return 0;
}
1C.Petya and File System (代补)
2A.Rank List
输入对应第i行解决问题的个数和总惩罚时间
输出rank榜上与输入组排名相同的组的数量。
没有那么简单,也够水了。以得分制统计,并让做对题得分占比重较大。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
int n, k, A[50], i, con=0, a, b;
scanf("%d %d",&n,&k);
for(i=0; i<n; i++)
{
scanf("%d %d",&a,&b);
A[i]=a*50-b;
}
sort(A,A+n);
for(i=0; i<n; i++)
{
if(A[i]==A[n-k])
{
con++;
}
}
printf("%d\n",con);
return 0;
}