1025 just the facts
http://acm.ustc.edu.cn/ustcoj/problem.php?id=1025
输出n阶乘的最后一位非0数
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<map>
#include<cmath>
using namespace std;
#define N 500
#define M 15596035
int main()
{
//freopen("a","r",stdin);
int ji,i,n;
while (scanf("%d",&n)!=EOF)
{
ji=1;
for (i=1;i<=n;i++)
{
ji*=i;
while (ji%10==0) ji/=10;
ji=ji%100000;//求大神指点这里1000什么的为什么会错
}
if (n<10) printf(" %d",n);
else if (n<100) printf(" %d",n);
else if (n<1000) printf(" %d",n);
else if (n<10000) printf(" %d",n);
else printf("%d",n);
printf(" -> %d\n",ji%10);
}
return 0;
}
1242 bee movie
http://acm.ustc.edu.cn/ustcoj/problem.php?id=1242
最简单的计算几何,枚举计算有多少个三点共线。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<map>
#include<cmath>
using namespace std;
#define N 500
#define M 15596035
struct point
{
int x,y;
}p[N];
int b[1000000][3];
double slope(int i,int j)
{
return (double)(p[j].y-p[i].y)/(double)(p[j].x-p[i].x);
}
int main()
{
freopen("a","r",stdin);
int i,j,k,sum,n;
while (scanf("%d",&n)!=EOF)
{
for (i=1;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y);
sum=0;
for (i=1;i<=n-2;i++)
for (j=i+1;j<=n-1;j++)
for (k=j+1;k<=n;k++)
{
double s1,s2;
if (p[i].x==p[j].x && p[j].x==p[k].x)
{
sum+=1;
b[sum][0]=i;
b[sum][1]=j;
b[sum][2]=k;
continue;
}
s1=slope(i,j);
s2=slope(j,k);
if (fabs(s1-s2)<1e-8)//若用乘法来判断斜率相等的话则可避免精度问题
{
sum+=1;
b[sum][0]=i;
b[sum][1]=j;
b[sum][2]=k;
}
}
printf("%d\n",sum);
for (i=1;i<=sum;i++) printf("%d %d %d\n",b[i][0],b[i][1],b[i][2]);
}
return 0;
}
http://acm.ustc.edu.cn/ustcoj/problem.php?id=1284
#include<cstdio>
#include<iostream>
using namespace std;
struct rec
{
long long x1;
long long y1;
long long x2;
long long y2;
int r1,g1,b1;
}r[1005];
int main()
{
int n,m,i,j,k,t=0,x,y,r2,g2,b2;
while (1)
{
cin>>n>>m;
if ((n==0)&&(m==0)) break;
t++;
printf("Case %d:\n",t);
for (i=1;i<=n;i++) cin>>r[i].x1>>r[i].y1>>r[i].x2>>r[i].y2>>r[i].r1>>r[i].g1>>r[i].b1;
for (j=1;j<=m;j++)
{
scanf("%d%d",&x,&y);
r2=g2=b2=255;
for (i=1;i<=n;i++)
if ((x>=r[i].x1)&&(x<=r[i].x2)&&(y>=r[i].y1)&&(y<=r[i].y2))
{
r2=r[i].r1;
g2=r[i].g1;
b2=r[i].b1;
}
printf("%d %d %d\n",r2,g2,b2);
}
cout<<endl;
}
return 0;
}
USTCOJ 1234 Calculate the Sum
http://acm.ustc.edu.cn/ustcoj/problem.php?id=1234
输入m n,输出这m的每一位数字对n的每一位数字取余的结果的总和。
统计m、n中1到9出现的次数,然后分别计算1到9取余的结果再乘上数字出现的次数即可。
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #include<cmath> using namespace std; #define N 1000005 char s1[N],s2[N]; int a[15],b[15]; int main() { // freopen("a","r",stdin); int t; scanf("%d",&t); //gets(s1); for (int kk=1;kk<=t;kk++) { long long sum=0; scanf("%s",s1); scanf("%s",s2); int l3,i,l1,l2; l1=strlen(s1); l2=strlen(s2); for (i=1;i<=9;i++) { a[i]=0; b[i]=0; } for (i=0;i<l1;i++) { l3=s1[i]-'0'; a[l3]++; } for (i=0;i<l2;i++) { l3=s2[i]-'0'; b[l3]++; } for (i=1;i<=9;i++) for (int j=2;j<=9;j++) sum+=(i%j)*(a[i]*b[j]); printf("%lld\n",sum); } return 0; }
1321 Pascal Library
http://acm.ustc.edu.cn/ustcoj/problem.php?id=1321
直接看input output就好。
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner scanner=new Scanner(System.in);
int n,d,i,j;
while (true)
{
n=scanner.nextInt();
d=scanner.nextInt();
if (n==0 && d==0) break;
int[][] a=new int[d+5][n+5];
for (i=1;i<=d;i++)
for (j=1;j<=n;j++)
a[i][j]=scanner.nextInt();
for (i=2;i<=d;i++)
for (j=1;j<=n;j++)
a[1][j]&=a[i][j];
int sum=0;
for (j=1;j<=n;j++) sum+=a[1][j];
if (sum>0) System.out.println("yes");
else System.out.println("no");
}
}
}