Forsaken喜欢数论
代码:
//线性筛找素数加Ans直接加
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
#define MAXN 30000003
long long n,ans;
long long chk[MAXN];
long long p[MAXN];
long long cnt[MAXN];
long long t;
int main(){
scanf("%lld",&n);
for (long long i=2;i<=n;i++){
if (!chk[i]){
p[++t]=i;ans+=i;
// printf("**p[%lld]=%lld\n",t-1,i);
}
for (long long j=1;j<=t;j++)
{
if(i*p[j]>n)break;
chk[i*p[j]] = 1;ans+=p[j];//printf("**%lld cnt[%lld]=%lld\n",i*p[j],j,cnt[j]);
if (i%p[j]==0)
break;
}
}
// for(long long i=1;i<=t;i++)ans+=p[i]*cnt[i];
printf("%lld",ans);
}
#include <iostream>
using namespace std;
const int LIM = 3e7 + 10;
int prime[LIM / 3];
int miniFactor[LIM];
int primepos;
void euler() {
int tmp;
for (int i = 2; i < LIM; i++) {
if (!miniFactor[i]) prime[primepos++] = i, miniFactor[i] = i;
for (int j = 0; (tmp = i * prime[j]) < LIM; j++) {
miniFactor[tmp] = prime[j];
if (!(i % prime[j])) break;
}
}
}
int main(void) {
euler();
long long sum = 0;
int n;
scanf("%d",&n);
for (int i = 1; i <= n; i++) {
sum += miniFactor[i];
}
printf("%lld\n",sum);
return 0;
}
Forsaken喜欢正方形
代码:
#include <iostream>
#include <math.h>
using namespace std;
//直接调用IsSquare函数,输入为四个点的坐标,输出为true or false;
//求两点间的距离
double Distance(int x1,int y1,int x2,int y2){
return sqrt(pow((x1-x2),2)+pow((y1-y2),2));
}
//判断三个点是否构成直角,第一个参数点是顶点
bool IsRightAngle(int x1,int y1,int x2,int y2,int x3,int y3){
if((x2-x1)*(x3-x1)+(y2-y1)*(y3-y1)==0)
return true;
return false;
}
bool IsSquare(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4){
if(x1==x2&&x2==x3)
return false;
double s12=Distance(x1,y1,x2,y2);
double s13=Distance(x1,y1,x3,y3);
double s14=Distance(x1,y1,x4,y4);
double s23=Distance(x2,y2,x3,y3);
double s24=Distance(x2,y2,x4,y4);
double s34=Distance(x3,y3,x4,y4);
if(s12==s13&&s24==s34&&s12==s24){
if(IsRightAngle(x1,y1,x2,y2,x3,y3)) return true;
else return false;
}
if(s12==s14&&s23==s34&&s12==s23){
if(IsRightAngle(x1,y1,x2,y2,x4,y4)) return true;
else return false;
}
if(s13==s14&&s23==s24&&s13==s23){
if(IsRightAngle(x1,y1,x3,y3,x4,y4)) return true;
else return false;
}
return false;
}
int main(){
int x1,y1,x2,y2,x3,y3,x4,y4;
cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
if(IsSquare(x1,y1,x2,y2,x3,y3,x4,y4))
printf("wen\n");
else if(IsSquare(x1-1,y1,x2,y2,x3,y3,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1+1,y1,x2,y2,x3,y3,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1+1,x2,y2,x3,y3,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1-1,x2,y2,x3,y3,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2+1,y2,x3,y3,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2-1,y2,x3,y3,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2,y2+1,x3,y3,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2,y2-1,x3,y3,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2,y2,x3+1,y3,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2,y2,x3-1,y3,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2,y2,x3,y3+1,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2,y2,x3,y3-1,x4,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2,y2,x3,y3,x4+1,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2,y2,x3,y3,x4-1,y4))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2,y2,x3,y3,x4,y4+1))
printf("hai xing\n");
else if(IsSquare(x1,y1,x2,y2,x3,y3,x4,y4-1))
printf("hai xing\n");
else
printf("wo jue de bu xing\n");
return 0;
}
#include <iostream>
#include<algorithm>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<map>
#include<queue>
#include<vector>
#include<string>
#include<time.h>
using namespace std;
struct node
{
int x, y;
}aa,bb,cc,dd,so[7];
vector<node>a, b, c, d;
int len(node a, node b)
{
int x = (a.x - b.x)*(a.x - b.x);
int y = (a.y - b.y)*(a.y - b.y);
return x + y;
}
int squre(node a, node b, node c, node d)
{
int flag = 0;
if (len(a, b) == len(d, c) && len(a, c) == len(b, d) && len(a, d) == len(b, c))
flag = 1;
return flag;
}
int t = 0;
void Dfs(node a, node b, node c, node d)
{
so[1] = a; so[2] = b; so[3] = c; so[4] = d;
for (int i = 1; i <= 4; i++)
{
so[i].x -= 1;
if (squre(so[1], so[2], so[3], so[4]))
t = 1;
so[i].x += 2;
if (squre(so[1], so[2], so[3], so[4]))
t = 1;
so[i].x -= 1;
}
for (int i = 1; i <= 4; i++)
{
so[i].y -= 1;
if (squre(so[1], so[2], so[3], so[4]))
t = 1;
so[i].y += 2;
if (squre(so[1], so[2], so[3], so[4]))
t = 1;
so[i].y -= 1;
}
}
int main()
{
cin >> aa.x >> aa.y;
cin >> bb.x >> bb.y;
cin >> cc.x >> cc.y;
cin >> dd.x >> dd.y;
if (squre(aa,bb,cc,dd))
{
cout << "wen" << endl;
return 0;
}
Dfs(aa, bb, cc, dd);
if (t == 1)
{
cout << "hai xing" << endl;
return 0;
}
cout << "wo jue de bu xing" << endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll x1,y1,x2,y2,x3,y3,x4,y4;
scanf("%lld%lld%lld%lld%lld%lld%lld%lld",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
if(abs(x1-x2)==abs(x3-x4)&&abs(y1-y2)==abs(y3-y4))
printf("wen\n");
else if(abs(x1-x3)==abs(x2-x4)&&abs(y1-y3)==abs(y2-y4))
printf("wen\n");
else if(abs(x1-x4)==abs(x2-x3)&&abs(y1-y4)==abs(y2-y3))
printf("wen\n");
else if(abs(abs(x1-x2)-abs(x3-x4))==1&&abs(y1-y2)==abs(y3-y4))
printf("hai xing\n");
else if(abs(abs(x1-x3)-abs(x2-x4))==1&&abs(y1-y3)==abs(y2-y4))
printf("hai xing\n");
else if(abs(x1-x2)==abs(x3-x4)&&abs(abs(y1-y2)-abs(y3-y4))==1)
printf("hai xing\n");
else if(abs(x1-x3)==abs(x2-x4)&&abs(abs(y1-y3)-abs(y2-y4))==1)
{
printf("hai xing\n");
}
else if(abs(abs(x1-x4)-abs(x2-x3))==1&&abs(y1-y4)==abs(y2-y3))
{
printf("hai xing\n");
}
else if(abs(x1-x4)==abs(x2-x3)&&abs(abs(y1-y4)-abs(y2-y3))==1)
{
printf("hai xing\n");
}
else
printf("wo jue de bu xing\n");
return 0;
}
Forsaken喜欢字符串
代码:
#include <bits/stdc++.h>
#include <unordered_map>
#define ll long long
#define sc scanf
#define pr printf
using namespace std;
string s[50005];
unordered_map<string, ll>mp;
int main()
{
//freopen("in.in", "r", stdin);
int n, m, len;
sc("%d%d", &n, &len);
for (int i = 1; i <= n; i++)
{
cin >> s[i];
for (int j = 0; j < len; j++)
for (int k = 1; j + k <= len; k++)
mp[s[i].substr(j, k)]++;
}
sc("%d", &m);
while (m--)
{
ll ans = 0;
int a, b;
sc("%d%d", &a, &b);
for (int j = 0; j < len; j++)
if (j + b <= len)
mp[s[a].substr(j, b)]--;
for (int j = 0; j < len; j++)
if (j + b <= len)
ans += mp[s[a].substr(j, b)];
for (int j = 0; j < len; j++)
if (j + b <= len)
mp[s[a].substr(j, b)]++;
ans *= b;
pr("%lld\n", ans);
}
}
Forsaken给学生分组
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5+17;
int a[maxn];
int main()
{
int n,k;
cin >> n >> k;
for(int i =0;i<n;i++)
{
cin >> a[i];
}
sort(a,a+n);
ll ans=0;
int left=0,right=n-1;
for(int i=0;i<k;i++)
{
ans += a[right]-a[left];
right--;
left++;
}
cout << ans <<endl;
}