博主只是记录一下自己的刷题历程,代码中还有很多不规范的地方,也没注释,没什么学习意义。
先排序后高精度,本人对高精度题极度反感
#include
#define ll long long
using namespace std;
struct person{
int a,b;
}arr[10005];
bool cmp(person &s1,person &s2){
return s1.a*s1.b=0;i--){
temp[i]=num[i];
}
memset(chu,0,sizeof(chu));
for(int i=5000;i>0;i--){
chu[i]=temp[i]/y;
temp[i-1]+=(temp[i]%y)*10;
}
chu[0]=temp[0]/y;
bool flag=false;
for(int i=5000;i>=0;i--){
if(ans[i]=0;i--){
ans[i]=chu[i];
}
}
for(int i=0;i<5000;i++){
num[i]*=x;
}
for(int i=0;i<5000;i++){
if(num[i]>9) num[i+1]+=num[i]/10;
num[i]=num[i]%10;
}
}
int main()
{
cin>>n;
cin>>num[0]>>startb;
for(int i=1;i<=n;i++){
cin>>arr[i].a>>arr[i].b;
}
sort(arr+1,arr+1+n,cmp);
for(int i=1;i<=n;i++){
insert(arr[i].a,arr[i].b);
}
int i=5000;
while(ans[i]==0&&i!=0){
i--;
}
while(i>=0){
cout<
差分思维题
#include
#define ll long long
using namespace std;
ll n,a,b,arr[100005],zheng,fu;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a;
arr[i]=a-b;
b=a;
}
for(int i=2;i<=n;i++){
if(arr[i]>0) zheng+=arr[i];
else if(arr[i]<0) fu-=arr[i];
}
cout<
用next_permutation()函数枚举所有全排列,暴力枚举
#include
#define ll long long
using namespace std;
int n,a,b,c,d,heng[10],zong[10],arr[10],ans=0x3f3f3f;
double r[10];
void suan(){
for(int i=1;i<=n;i++){
r[i]=0;
}
double temp=abs(a-c)*abs(b-d);
for(int i=1;i<=n;i++){
int num=arr[i];
r[num]=min(min(abs(heng[num]-a),abs(heng[num]-c)),min(abs(zong[num]-b),abs(zong[num]-d)));
for(int j=1;j>n>>a>>b>>c>>d;
for(int i=1;i<=n;i++){
cin>>heng[i]>>zong[i];
arr[i]=i;
}
do{
suan();
}while(next_permutation(arr+1,arr+1+n));
cout<
广搜,就是有很多走法,整体思维量不大
#include
#define ll long long
using namespace std;
struct point{
int x,y,flag;
};
int n,m,arr[51][51],a,b,c,d,e,vis[51][51][4];
char ch;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>arr[i][j];
}
}
cin>>a>>b>>c>>d>>ch;
if(ch=='E') e=0;
if(ch=='S') e=1;
if(ch=='W') e=2;
if(ch=='N') e=3;
vis[a][b][e]=1;
queuer;
r.push(point{a,b,e});
while(!r.empty()){
int x=r.front().x,y=r.front().y,flag=r.front().flag;
r.pop();
if(x==c&&y==d){
int ans=0x3f;
for(int i=0;i<4;i++){
if(vis[x][y][i]!=0){
cout<=1&&x+dx[flag]=1&&y+dy[flag]=1&&x+2*dx[flag]=1&&y+2*dy[flag]=1&&x+3*dx[flag]=1&&y+3*dy[flag]
等暑假参加集训应该会天天更新