vjudge上 题目链接:VJ
//垃圾
#include<bits/stdc++.h>
using namespace std;
int judge(char s[])
{
if(strcmp(s,"rat")==0)
return 1;
else if(strcmp(s,"ox")==0)
return 2;
else if(strcmp(s,"tiger")==0)
return 3;
else if(strcmp(s,"rabbit")==0)
return 4;
else if(strcmp(s,"dragon")==0)
return 5;
else if(strcmp(s,"snake")==0)
return 6;
else if(strcmp(s,"horse")==0)
return 7;
else if(strcmp(s,"sheep")==0)
return 8;
else if(strcmp(s,"monkey")==0)
return 9;
else if(strcmp(s,"rooster")==0)
return 10;
else if(strcmp(s,"dog")==0)
return 11;
if(strcmp(s,"pig")==0)
return 12;
}
int main()
{
int t;
char s1[10];
char s2[10];
scanf("%d",&t);
while(t--)
{
cin>>s1>>s2;
if(strcmp(s1,s2)==0)
{
printf("12\n");
continue;
}
else
{
int ans1=judge(s1);
int ans2=judge(s2);
if(ans2>ans1)
cout<<ans2-ans1<<endl;
else
cout<<ans2-ans1+12<<endl;
}
}
return 0;
}
还是用map好,做题都蒙圈了。。。
#include<bits/stdc++.h>
using namespace std;
string a[15]={"rat","ox","tiger","rabbit","dragon","snake","horse","sheep","monkey","rooster","dog","pig"};
map<string,int> mmp;
void init()
{
for(int i=1;i<=12;i++)
{
mmp[a[i]]=i;
}
}
int main()
{
int T;
init();
scanf("%d",&T);
while(T--)
{
string s1,s2;
cin >> s1 >> s2;
int x1=mmp[s1],x2=mmp[s2];
if(x1 == x2)
{
printf("12\n");
}
else if(x2 > x1)
printf("%d\n",x2-x1);
else
printf("%d\n",(x2+12-x1)%12);
}
return 0;
}
K A Cubic number and A Cubic Number
主要还是思维,首先知道公式:a^3-b^3=(a-b)*(a^2+ab+b^2),p是素数,所以(a-b)=1很重要的点,知道这个问题就解决了。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ll n;
scanf("%lld",&n);
ll i,flag=0,t=1;
while(3*t*t+3*t+1<=n)
{
if(3*t*t+3*t+1==n)
{
printf("YES\n");
flag=1;
}
t++;
}
if(!flag)
printf("NO\n");
}
return 0;
}
高进度用java,看到表达式,开始怀疑人生。
import java.math.*;
import java.util.*;
//a=((y2-y1)*(y3*y3-y1*y1+x3*x3-x1*x1)-(y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1))/(2.0*((x3-x1)*(y2-y1)-(x2-x1)*(y3-y1)));
//b=((x2-x1)*(x3*x3-x1*x1+y3*y3-y1*y1)-(x3-x1)*(x2*x2-x1*x1+y2*y2-y1*y1))/(2.0*((y3-y1)*(x2-x1)-(y2-y1)*(x3-x1)));
public class Main {
public static void main(String[] args) {
BigDecimal x1,x2,x3,y1,y2,y3,x,y,x0,y0,r;
BigDecimal a,b,c,d,e,f,g,num,ans;
Scanner cin = new Scanner(System.in);
int n;
n=cin.nextInt();
while(n>0)
{
x1 = cin.nextBigDecimal();
y1 = cin.nextBigDecimal();
x2 = cin.nextBigDecimal();
y2 = cin.nextBigDecimal();
x3 = cin.nextBigDecimal();
y3 = cin.nextBigDecimal();
x = cin.nextBigDecimal();
y = cin.nextBigDecimal();
a = x3.subtract(x2).multiply(BigDecimal.valueOf(2));// 2*(x3-x2)
b = y3.subtract(y2).multiply(BigDecimal.valueOf(2));// 2*(y3-y2)
c = x3.pow(2).subtract(x2.pow(2)).add(y3.pow(2).subtract(y2.pow(2)));
//x3^2-x2^2+(y3^2-y2^2)
e = x2.subtract(x1).multiply(BigDecimal.valueOf(2));//2*(x2-x1)
f = y2.subtract(y1).multiply(BigDecimal.valueOf(2));//2*(y2-y1)
g = x2.pow(2).subtract(x1.pow(2)).add(y2.pow(2).subtract(y1.pow(2)));//x2^2-(x1^2)+(y2^2-y1^2)
x0=g.multiply(b).subtract(c.multiply(f)).divide(e.multiply(b).subtract(a.multiply(f)));//(g*b-(c*f))/(e*b-a*f)
y0=a.multiply(g).subtract(c.multiply(e)).divide(a.multiply(f).subtract(b.multiply(e)));//(a*g-c*e)/(a*f-b*e)
num = (x1.subtract(x0)).pow(2).add((y1.subtract(y0)).pow(2));//(x1-x0)^2+(y1-y0)^2
ans = (x.subtract(x0)).pow(2).add((y.subtract(y0)).pow(2));
if (ans.compareTo(num)>0) {
System.out.println("Accepted");
}
else
System.out.println("Rejected");
n--;
}
}
}
题意还是比较好明白的,就是看看最长的字符串中是不是含有其它字符串。可是普通的办法肯定会超时,不容易实现,再一次见证了JAVA的强大。
这有BufferedReader 的介绍:BufferedReader
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
String str[]=new String[100010];
String t=bf.readLine();
int T=Integer.parseInt(t);
while(T>0)
{
String n=bf.readLine();
int N=Integer.parseInt(n);
String news="";
for(int i=0;i<N;i++)
{
str[i]=bf.readLine();
if(str[i].length()>news.length())
news=str[i];
}
int flag=1;
for(int i=0;i<N;i++)
{
if(!news.contains(str[i]))
{
flag=0;
break;
}
}
if(flag==1) System.out.println(news);
else System.out.println("No");
T--;
}
}
}
find()函数也是以绝,学习find()点击转到。
#include<bits/stdc++.h>
using namespace std;
string str[100010];
int t,n;
int main()
{
ios::sync_with_stdio(false);
int n,t;
scanf("%d",&t);
while(t--)
{
int flag=1;
scanf("%d",&n);
getchar();
for(int i=1;i<=n;i++)
{
cin>>str[i];
}
for(int i=1;i<=n;i++)
{
int ans=0;
for(int j=1;j<=n;j++)
{
if(str[i].find(str[j])!=-1)
ans++;
else break;
}
if(ans==n)
{
cout<<str[i]<<endl;
flag=0;
break;
}
}
if(flag) printf("No\n");
}
return 0;
}