public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
double L=sc.nextDouble();
double R = sc.nextDouble();
double z;
z=Math.PI*2*R;
double Yu=L%z;
double x = Yu*2*Math.PI/z;
double reslutnx = R*Math.cos(x);
double reslutny = R*Math.sin(x);
double reslutsx = R*Math.cos(x);
double reslutsy = -R*Math.sin(x);
System.out.print(String.format("%.3f", reslutnx));System.out.print(" ");
System.out.println(String.format("%.3f", reslutny));
System.out.print(String.format("%.3f", reslutsx));System.out.print(" ");
System.out.println(String.format("%.3f", reslutsy));
}
}
}
第二题可以做到准确O(n),代码如下
#include <map> #include <set> #include <stack> #include <queue> #include <cmath> #include <ctime> #include <vector> #include <cstdio> #include <cctype> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std; #define INF 0x3f3f3f3f #define inf -0x3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define mem0(a) memset(a,0,sizeof(a)) #define mem1(a) memset(a,-1,sizeof(a)) #define mem(a, b) memset(a, b, sizeof(a)) #define MP(x,y) make_pair(x,y) typedef long long ll; void fre() { freopen("input.in", "r", stdin); freopen("output.out", "w", stdout); } template <class T1, class T2>inline void gmax(T1 &a, T2 b) { if (b>a)a = b; } template <class T1, class T2>inline void gmin(T1 &a, T2 b) { if (b<a)a = b; } const int N=1e5+100; int pre[100]; int sum[N],a[N],dp[N]; const int MOD=1000000007; int main(){ int n; while(scanf("%d",&n)!=EOF){ for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=0;i<=9;i++) pre[i]=0; int ed = 0; dp[1]=1,sum[1]=1; pre[a[1]]=1; for(int i=2;i<=n;i++){ ed=max(pre[a[i]],ed); if(ed == 0) dp[i]=sum[i-1] ,dp[i]++; else dp[i]=((sum[i-1]-sum[ed-1])+MOD)%MOD; sum[i]=( dp[i] + sum[i-1])%MOD; pre[a[i]] = i; } // for(int i=1;i<=n;i++) // printf("dp[%d] %d\n",i,dp[i]); printf("%d\n",dp[n]); } return 0; }
//第一题
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <string>
#include <algorithm>
#include<math.h>
using namespace std;
int main()
{
double l,r;
double pi=3.141592654;
while(scanf("%lf%lf",&l,&r)==2)
{
double c=2*pi*r;
double sita=(l/c)*2*pi;
double sita2=(-l/c)*2*pi;
//printf("c=%lf l=%lf l/c=%lf\n",c,l,sin(30/180.0*pi));
// printf("%lf\n",sin(sita));
double y=sin(sita)*r;
double x=cos(sita)*r;
double y1=sin(sita2)*r;
double x1=cos(sita2)*r;
printf("%.3lf %.3lf\n",x1,y1);
printf("%.3lf %.3lf\n",x,y);
}
return 0;
}
//第二题
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <string>
#include <algorithm>
#include<math.h>
using namespace std;
int a[100000+5];
int n;
int geti(int l,int r)
{
if(l==r)
return 1;
int i,j,k=-1;
for(i=l;i<=r;i++)
{
for(j=i+1;j<=r;j++)
{
if(a[i]==a[j])
return (geti(l,j-1)*geti(j,r))%1000000007;
}
}
int ans=pow(2.0,(r-l));
return ans%1000000007 ;
}
int main()
{
while(scanf("%d",&n)==1)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int ans=pow(2.0,n-1);
printf("%d\n",geti(0,n-1));
}
return 0;
}
通过80%+,求解
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int cnt = scanner.nextInt(); int[][] result = new int[cnt][2]; for (int i = 0; i < cnt; i++) { int N = scanner.nextInt(); int[] money = new int[N]; for (int j = 0; j < N; j++) { money[j] = scanner.nextInt(); } int m = 0, n = N - 1; for (int j = 0; j < N; j++) { if (j % 2 == 0) { if (money[m] >= money[n]) { result[i][0] += money[m]; m++; } else { result[i][0] += money[n]; n--; } } else { if (money[m] >= money[n]) { result[i][1] += money[m]; m++; } else { result[i][1] += money[n]; n--; } } } } for (int i = 0; i < result.length; i++) { System.out.printf("Case #%d: %d %d\n", (i + 1), result[i][0], result[i][1]); } } }
跑步:
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
Double r=0.0;
Double L=0.0;
Double pi=Math.PI;
L=scanner.nextDouble();
r=scanner.nextDouble();
Double temp=(360*L)/(2*pi*r);
//顺时针坐标
Double x1=0.0;
Double y1=0.0;
//逆时针坐标
Double x2=0.0;
Double y2=0.0;
x1=r*Math.cos(Math.toRadians(-temp));
y1=r*Math.sin(Math.toRadians(-temp));
x2=r*Math.cos(Math.toRadians(temp));
y2=r*Math.sin(Math.toRadians(temp));
DecimalFormat df=new DecimalFormat("0.000");
System.out.println(df.format(x1)+" "+df.format(y1));
System.out.println(df.format(x2)+" "+df.format(y2));
}
}
第三题只通过了29%,为什么啊import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
ArrayList<String> list=new ArrayList<>();
int times=sc.nextInt();
for(int i=0;i<times;i++){
int parts=sc.nextInt();
int[] arr=new int[parts];
for(int j=0;j<parts;j++){
int temp=sc.nextInt();
arr[j]=temp;
}
int resultA=0;
int resultB=0;
int head=0;
int tail=arr.length-1;
boolean turnA=true;
for(int k=0;k<arr.length;k++){
if(turnA==true){
if(arr[head]>=arr[tail]){
resultA+=arr[head];
head++;
turnA=false;
}else{
resultA+=arr[tail];
tail--;
turnA=false;
}
}else{
if(arr[head]>=arr[tail]){
resultB+=arr[head];
head++;
turnA=true;
}else{
resultB+=arr[tail];
tail--;
turnA=true;
}
}
}
if(resultA>resultB) {
list.add("Case #"+(i+1)+": "+resultA + " " + resultB);
}else{
list.add("Case #"+(i+1)+": "+resultB + " " + resultA);
}
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <string>
#include <algorithm>
#include<math.h>
using namespace std;
int a[100000+5];
int n;
int f[11];
int dp[100000+5];
int geti()
{
memset(f,0,sizeof(f));
memset(dp,0,sizeof(dp));
int i,j;
dp[0]=1;
for(i=1;i<n;i++)
{
memset(f,0,sizeof(f));
f[a[i]]=1;
for(j=i-1;j>=0;j--)
{
dp[i]=(dp[i]+dp[j])%1000000007;
//从后往前切,每切一刀的结果就是切的前一段的所有的可能
if(f[a[j]])
break;
f[a[j]]=1;
}
if(j==-1)
dp[i]++;
//处理特殊情况:1.遇到已经切过得颜色,就结束了不能往前切了,假如 没有同颜色的需要多加一种可能那就是一刀不切
}
return dp[n-1]%1000000007;
}
int main()
{
while(scanf("%d",&n)==1)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int ans=pow(2.0,n-1);
printf("%d\n",geti());
}
return 0;
}