A Not https://vjudge.net/problem/AtCoder-abc178_a
签到
#include<iostream>
#include<string>
#include<queue>
#include<algorithm>
#include<cstdlib>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int maxn=1e5+5;
int n,k;
ll a[maxn];
ll mp[maxn];
int main()
{
int n;
cin>>n;
if(n==1) cout<<0<<endl;
else cout<<1<<endl;
return 0;
}
B Product Max https://vjudge.net/problem/AtCoder-abc178_b
签到
#include<iostream>
#include<string>
#include<queue>
#include<algorithm>
#include<cstdlib>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int maxn=1e5+5;
int n,k;
int main()
{
ll a,b,c,d;
cin>>a>>b>>c>>d;
ll maxx=0;
ll a1=a*c;
ll b1=a*d;
ll c1=b*c;
ll d1=b*d;
cout<<max(max(a1,b1),max(c1,d1))<<endl;
system("pause");
return 0;
}
C Ubiquity https://vjudge.net/problem/AtCoder-abc178_c
快速幂
#include<iostream>
#include<string>
#include<queue>
#include<algorithm>
#include<cstdlib>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int maxn=1e5+5;
const int mod=1e9+7;
inline ll quick(ll a,ll b,ll p) //(a^b) mod p
{
ll ans=1;
for( ;b;b>>=1)
{
if(b&1) ans=ans*a%p;
a=a*a%p;
}
return ans%p; //如果b=0,p=1,不加%p会错
}
int main()
{
ll n;
cin>>n;
ll t=(quick(10,n,mod)+quick(8,n,mod)-2*quick(9,n,mod)+2*mod)%mod;
cout<<t<<endl;
system("pause");
return 0;
}
D Redistribution https://vjudge.net/problem/AtCoder-abc178_d
一开始以为是dp题,后来找到规律,有人一行代码过是真夸张D_D
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<map>
#include<stack>
#include<set>
#include<queue>
#include<vector>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=1e6+6;
const int mod=1e9+7;
ll a[maxn]={1,0,0,1,1};
bool cmp(ll a,ll b){
return a>b;
}
int main()
{
cin.tie(0);std::ios::sync_with_stdio(false);
int n;
cin>>n;
if(n>4){
for(int i=5;i<=n;i++)
a[i]=(a[i-1]+a[i-3])%mod;
}
cout<<a[n]<<endl;
system("pause");
return 0;
}
E Dist Max https://vjudge.net/problem/AtCoder-abc178_e
平面的曼哈顿距离,将绝对值x1-y1+绝对值x2-y2分类讨论,转化成max(a[n]-a[1],b[n]-b[1])
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<map>
#include<stack>
#include<set>
#include<queue>
#include<vector>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=1e6+6;
const int mod=1e9+7;
ll a[maxn],b[maxn];
int main()
{
cin.tie(0);std::ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
a[i]=x+y;
b[i]=x-y;
}
sort(a+1,a+1+n);
sort(b+1,b+1+n);
cout<<max(a[n]-a[1],b[n]-b[1])<<endl;
system("pause");
return 0;
}
F Contrast https://vjudge.net/problem/AtCoder-abc178_f
当时没做出来,看了份别人的代码,好像是把一个数组从前向后排,一个从后向前排,逐个进行比较如果有一样的就向后找一个不相同的swap过去
贴一份atcoder上的代码
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<map>
#include<stack>
#include<set>
#include<queue>
#include<vector>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=2e5+100;
const int mod=1e9+7;
int n,a[maxn],b[maxn];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=n;i>=1;i--)
cin>>b[i];
for(int i=1;i<=n;i++){
if(a[i]==b[i]){
bool flag=0;
for(int j=1;j<=n;j++){
if(b[j]!=a[i]&&b[i]!=a[j]){
swap(b[i],b[j]);
flag=1;
break;
}
}
if(!flag){
cout<<"No";
return 0;
}
}
}
cout<<"Yes"<<endl;
for(int i=1;i<=n;i++) cout<<b[i]<<" ";
system("pause");
return 0;
}