F CodeForces - 710A
训练1(共12题) - Virtual Judge
我的代码
#include<iostream>
using namespace std;
int main()
{
char arr[10][10],a;
int b,c,k=0;
cin>>a>>c; b=a-'a'+1;
// cout<<b<<" "<<c<<endl;
for(int i=0;i<=9;i++)
{
for(int j=0;j<=9;j++)
{
arr[i][j]='0';
}
}
for(int i=1;i<=8;i++)
{
for(int j=1;j<=8;j++)
{
arr[i][j]='*';
}
}
/* for(int i=0;i<=9;i++)
{
for(int j=0;j<=9;j++)
{
cout<<arr[i][j];
}
cout<<endl;
}*/
if(arr[b-1][c+1]=='*') k++;
if(arr[b][c+1]=='*') k++;
if(arr[b][c-1]=='*') k++;
if(arr[b+1][c]=='*') k++;
if(arr[b-1][c]=='*') k++;
if(arr[b+1][c+1]=='*') k++;
if(arr[b+1][c-1]=='*') k++;
if(arr[b-1][c-1]=='*') k++;
cout<<k<<endl;
}
陈杨的
#include<stdio.h>
int main(){
char c;
int d;
int val=0;
scanf("%c",&c);
scanf("%d",&d);
if(c=='a'||c=='h'){
val+=1;
}
if(d==1||d==8){
val+=1;
}
if(val==0){
printf("8");
}
if(val==1){
printf("5");
}
if(val==2){
printf("3");
}
return 0;
}//不在棋盘边上点 输出都是8;
//边上的点 除了四个角都是8-3
//四个角的点8-3-2
//坐标(x,y)里含a、h、1、8都不是中间的点 ,含一个是边上的点,含两个是四角的点
G CodeForces - 1257A
#include<iostream>
using namespace std;
#include<bits/stdc++.h>
int main()
{
int k,n,x,a,b,j=0;
cin>>k;
while(k--)
{
cin>>n>>x>>a>>b;
j=abs(a-b);
if(x==0) cout<<j<<endl;
else if(j==n-1)
{cout<<n-1<<endl;
continue;
}
else
{
if((j+x)<n-1)
cout<<j+x<<endl;
else cout<<n-1<<endl;
}
}
}
陈杨的
#include<stdio.h>
#include<math.h>
int main(){
int t;
int n,x,a,b;
int dist;
scanf("%d",&t);
while(t--){
scanf("%d%d%d%d",&n,&x,&a,&b);
dist=abs(a-b);
dist+=x;
if(dist>n-1){
dist=n-1;
}
printf("%d\n",dist);
}
}
//每次交换操作 位置能加一或减一
//题干里的原话是“你能交换的次数”,可以理解为如果达到最远的距离就可以停止操作
//一个if判断就能得出答案了,也就是判断一下操作x次+1后是不是两个人到达队伍两端
H CodeForces - 988A
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k,a[9999]={0},b[9999],ai,j=0;
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>ai;
if(a[ai]==0)
{
a[ai]=1;b[j++]=i;
}
}
if(j<k)cout<<"NO"<<endl;
else
{
cout<<"YES"<<endl;
for(int i=0;i<k;i++)
{
if(i==j-1)
{
cout<<b[i]+1<<" "; return 0;
}
else
{
cout<<b[i]+1<<" ";
}
}
}
}
陈杨的
#include<stdio.h>
int b[101]={0};
int a[101];
int j=1;
int n=0;
int k=0;
int s=0;
int temp=0;
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&temp);
if(b[temp]==0){
b[temp]+=i;
s++;
}
}
if(s<k){
printf("NO\n");
}else{
int cnt=0;
printf("YES\n");
for(int i=1;i<=100&&k;i++){
if(b[i]!=0){
printf("%d ",b[i]);
cnt++;
if(cnt==k)return 0;
}
}
}
}
//可以将题目概括为:输入 一个变量n和一个变量k,n代表接下来将会有一组个数为n的数据,
// 每个数据范围(1-100),这个数值代表一个人的性格值;
//k代表性格种类个数,
//题目要求判断这n个性格值的数据组中能否分成k个以上的类
//例如1 1 2 3能分成3类、1 2 3 4能分成四类
//判断完后,如果类别数能达到k,再输出k个个性不同的人对应数组里的位置 ;例如{15 13 15 15 12} 中输出{1 2 5 }
//利用一个桶数组b[i],作用是记录i性格的人有没有出现过,b[i]存储性格i第一次出现时是位置也就是 当时n个人中的第几个
//读入数据时 例如此时输入的性格为temp 判断b[temp]是否为零,如果为零 说明此时的temp是全新的性格,
//需要用b[]记录,及b[temp]=i,同时当前出现的性格种类+1
//如果不为零 说明之前已经出现过性格为temp的人,不做任何改变
//到最后输入完成,cnt计数器统计完成了性格类别的个数,同时数组b[]中已经记录了出现过的且第一次出现性别的位置
// 最后输出判断cnt是否大于k,如果是,再将k和数组b的信息输出即可
//注意题目说只需要输出k种,多出来的cnt-k不能输出
CodeForces - 1539Bhttps://vjudge.net/contest/528020#problem/FCodeForces - 1539B
训练1(共12题) - Virtual Judge
I题
佩蒂娅曾经写过一首悲伤的情歌,并将它分享给瓦莎。这首歌是一串由小写英文字母组成的字符串。瓦莎就这首歌编了q个问题。每个问题都是关于歌曲中第 l 个字母到第 r 个字母的一个子段。Vasya按照这个子段的字符串的顺序从左到右歌唱,对于每个字母我们会对这个字母重复唱k次,其中k是字母表中对应这个字母的索引。
例如,如果问题是关于子字符串“abbcb”,那么Vasya歌唱字母“a”一次,对于每个字母“b”歌唱两次,字母“c”歌唱三次,这样结果唱出来的字符串就为“abbbbcccbb”,其长度为10。Vasya对结果字符串具体是什么不感兴趣,但是对于结果的字符串长度感兴趣。
所以请你帮助Petya,对于每次Vasya的询问,给出每次询问的子字符串的结果字符串的长度。
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
char arr[99999],c;
int main()
{
int n,q,l,r=0,b[99999],a[99999];
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>c;
a[i]=(c-'a'+1);// 对题目中这句话“对于每个字母我们会对这个字母重复唱k次,其中k是字母表中对应这个字母的索引。”
}//k是每个字母对应26个英文字母表的索引,举例就是A=1 B=2 C=3 D=4 E=5 F=6 G=7 ,将每个字符串中每个字母对应的索引号存储到数组a中
//题目要求每次询问一个区间内的结果字符串的长度
for(int i=1;i<=n;i++)//记录i是从1开始的,因为下面要用到他的前一项i==0
//对应每一个数组b[n],存储着从a[1]、a[2]、a[3]、到a[n]内每一个数组的
{
//使用前缀和公式
b[i]=b[i-1]+a[i];
}
for(int i=0;i<q;i++)//求区间范围内的长度
{
cin>>l>>r; cout<<b[r]-b[l-1]<<endl;
}
}
J题 黑暗爆炸 - 1218
训练1(共12题) - Virtual Judge
https://darkbzoj.cc/problem/1218
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5005;//防止越界
int a[N][N]={0},s[N][N]={0};
int main(void)
{
int n,r,ans,res,x,y,w;//
scanf("%d%d",&n,&r);
while(n--)
{
//输入每个坐标和它的价值
scanf("%d%d%d",&x,&y,&w);
x++;
y++;
a[x][y]+=w;
}
for(int i=1;i<N;i++)
{
for(int j=1;j<N;j++)
{//套用公式,遍历,s[i][j]表示的是从[0,0]到 [i][j]这两个点所构成矩形面积内亮度的大小(a[x][y]的大小)
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
}
}
for(int i=r;i<N;i++)
{
for(int j=r;j<N;j++)
{
//输入两个坐标点求两个坐标点所构成矩形面积内亮度的大小
//scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
//sum=pre_sum[i][j]-pre_sum[i][j-r]-pre_sum[i-r][j]+pre_sum[i-r][j-r];
ans=s[i][j]-s[i-r][j]-s[i][j-r]+s[i-r][j-r];
res=max(ans,res);
// if(ans>max) max=ans;
}
}
if(res>32767)res=32767;
printf("%d\n",res);
return 0;
}