题意: 知道了一个序列a[1]..a[n] ,给出 m 个约束条件,
① st sn gt ki 表示a[st]+a[st+1]+..a[st+sn]>ki
② st sn lt ki 表示a[st]+a[st+1]+..a[st+sn]<ki
问是否存在这样的 a[i] 序列。
分析: 将上面的两个不等式等价转换建立差分约束系统
将 ① 变为s[st-1]-s[st+en] < -ki <=-ki-1
将 ② 变为s[st+en]-s[st-1] < ki <=ki-1
求解这个差分约束系统,看最后有无冲突
// gt dis[s[i].en]-dis[s[i].st-1]<=ki-1// lt dis[st]-dis[en]<=-ki-1#include#include #define clr(x)memset(x,0,sizeof(x))struct node{ int st,en;}q[105];int dis[105];int k[105];int main(){ int n,m,a,b,c,i,j; char s[3]; while(scanf("%d",&n)!=EOF) { if(n==0) break; scanf("%d",&m); for(i=0;i dis[q[j].st]+k[j]) dis[q[j].en]=dis[q[j].st]+k[j]; for(i=0;i dis[q[i].st]+k[i]) break; if(i!=m) printf("successful conspiracy\n"); else printf("lamentable kingdom\n"); } return 0;}