题意:给定区间1到n,对于区间里面有m个限制,区间li到ri里面取值x,其他取值h,问最后的结果是多少。
思路:模拟。。。
#include<bits/stdc++.h>
using namespace std;
struct node{
int l,r,x;
}a[55];
int b[55];
int main(){
int n,h,m;
scanf("%d%d%d",&n,&h,&m);
for(int i=1;i<=n;i++)
b[i]=1e9;
for(int i=0;i<m;i++){
scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].x);
for(int j=a[i].l;j<=a[i].r;j++)
b[j]=min(a[i].x,b[j]);
}
for(int i=1;i<=n;i++)
if(b[i]==1e9)
b[i]=h;
int sum=0;
for(int i=1;i<=n;i++)
sum+=b[i]*b[i];
printf("%d\n",sum);
}
题意:给定两个矩阵,每次可以调换矩阵对应位置的数,问最后能不能使得两个矩阵的行和列都严格递增。
思路:思维,我把两个矩阵中的最小值放到a矩阵里,最大值放到b矩阵里,再比较一下。
#include<bits/stdc++.h>
using namespace std;
int b[55][55],a[55][55];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&b[i][j]);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int t1=a[i][j],t2=b[i][j];
a[i][j]=min(t1,t2);
b[i][j]=max(t1,t2);
}
}
int f=0;
for(int i=1;i<=n;i++){
for(int j=2;j<=m;j++){
if(a[i][j]<=a[i][j-1]){
f=1;
break;
}
if(b[i][j]<=b[i][j-1]){
f=1;
break;
}
}
if(f==1)
break;
}
if(f==1){
puts("Impossible");
return 0;
}
for(int i=1;i<=m;i++){
for(int j=2;j<=n;j++){
if(a[j][i]<=a[j-1][i]){
f=2;
break;
}
if(b[j][i]<=b[j-1][i]){
f=2;
break;
}
}
if(f==2)
break;
}
if(f==2){
puts("Impossible");
return 0;
}
puts("Possible");
}
#include <bits/stdc++.h>
using namespace std;
int a[100001];
set <pair <int, int > >s;
int main()
{
int n,k,x,i,j;
int ans;
scanf("%d %d",&n,&k);
for(i=0;i<k;i++)
{
scanf("%d",&x);
if(a[x-1]>0) s.insert({x-1,x});
if(a[x+1]>0) s.insert({x+1,x});
s.insert({x,x});
a[x]++;
}
ans=(n-2)*3+4;
if(n==1) ans=1;
ans-=s.size();
printf("%d",ans);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 100010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,m,a[N],cnt[N],tot;
vector<int> pos[N];
ll ans;
signed main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
m=read(),n=read();
for (int i=1;i<=n;i++) a[i]=read(),pos[a[i]].push_back(i);
for (int i=1;i<=m;i++)
{
if (i>1)
{
if (pos[i].empty()) ans++;
else
{
int x=pos[i][0];
if (pos[i-1].empty()||pos[i-1][pos[i-1].size()-1]<x) ans++;
}
}
if (pos[i].empty()) ans++;
if (i<m)
{
if (pos[i].empty()) ans++;
else
{
int x=pos[i][0];
if (pos[i+1].empty()||pos[i+1][pos[i+1].size()-1]<x) ans++;
}
}
}
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}